From dc7731a108f818fd0a26087d5d5c7a679510ac13 Mon Sep 17 00:00:00 2001
From: Ryan DowlingSoka To confirm your installation of the ImageMagick distribution was successful, ensure that the installation directory is in your executable search path and type: The ImageMagick logo is displayed on your X11 display. To verify the ImageMagick build configuration, type: To list which image formats are supported , type: For a more comprehensive test, you run the ImageMagick test suite by typing: Now reconfigure, rebuild, and reinstall ImageMagick. To verify JPEG is now properly supported within ImageMagick, use this command: You should see a mode of rw- associated with the JPEG tag. This mode means the image can be read or written and can only support one image per image file. We list a few examples of the animate command here to illustrate its usefulness and ease of use. To get started, lets animate an image sequence in the GIF format: To animate a directory of JPEG images, use: You can find additional examples of using animate in Examples of ImageMagick Usage. A distributed pixel cache is an extension of the traditional pixel cache available on a single host. The distributed pixel cache may span multiple servers so that it can grow in size and transactional capacity to support very large images. Start up the pixel cache server on one or more machines. When you read or operate on an image and the local pixel cache resources are exhausted, ImageMagick contacts one or more of these remote pixel servers to store or retrieve pixels. The distributed pixel cache relies on network bandwidth to marshal pixels to and from the remote server. As such, it will likely be significantly slower than a pixel cache utilizing local storage (e.g. memory, disk, etc.). A great majority of image formats and algorithms restrict themselves to a fixed range of pixel values from 0 to some maximum value, for example, the Q16 version of ImageMagick permit intensities from 0 to 65535. High dynamic-range imaging (HDRI), however, permits a far greater dynamic range of exposures (i.e. a large difference between light and dark areas) than standard digital imaging techniques. HDRI accurately represents the wide range of intensity levels found in real scenes ranging from the brightest direct sunlight to the deepest darkest shadows. Enable HDRI at ImageMagick build time to deal with high dynamic-range images, but be mindful that each pixel component is a 32-bit floating point value. In addition, pixel values are not clamped by default so some algorithms may have unexpected results due to out-of-band pixel values than the non-HDRI version. If you are dealing with large images, make sure the pixel cache is written to a disk area with plenty of free space. Under Linux, this is typically /tmp and for Windows, c:/temp. You can tell ImageMagick to write the pixel cache to an alternate location and conserve memory with these options: Set global resource limits for your environment in the policy.xml configuration file. If you plan on processing the same image many times, consider the MPC format. Reading a MPC image has near-zero overhead because its in the native pixel cache format eliminating the need for decoding the image pixels. Here is an example: ImageMagick can read, process, or write mega-, giga-, or tera-pixel image sizes. An image width or height can range from 1 to 2 giga-pixels on a 32 bit OS (up to 2147483647 rows/columns) and up to 9 exa-pixels on a 64-bit OS (up to 9223372036854775807 rows/columns). Note, that some image formats have restrictions on image size. For example, Photoshop images are limited to 300,000 pixels for width or height. Here we resize an image to a quarter million pixels square: For large images, memory resources will likely be exhausted and ImageMagick will instead create a pixel cache on disk. Make sure you have plenty of temporary disk space. If your default temporary disk partition is too small, tell ImageMagick to use another partition with plenty of free space. For example: To ensure large images do not consume all the memory on your system, force the image pixels to memory-mapped disk with resource limits: Here we force all image pixels to disk: Caching pixels to disk is about 1000 times slower than memory. Expect long run times when processing large images on disk with ImageMagick. You can monitor progress with this command: For really large images, or if there is limited resources on your host, you can utilize a distributed pixel cache on one or more remote hosts: ImageMagick includes support for heterogeneous distributed processing with the OpenCL framework. OpenCL kernels within ImageMagick permit image processing algorithms to execute across heterogeneous platforms consisting of CPUs, GPUs, and other processors. Depending on your platform, speed-ups can be an order of magnitude faster than the traditional single CPU. First verify that your version of ImageMagick includes support for the OpenCL feature: If so, run this command to realize a significant speed-up for image convolution: If an accelerator is not available or if the accelerator fails to respond, ImageMagick reverts to the non-accelerated convolution algorithm. To invoke the custom coder from the command line, use these commands: To invoke the custom filter from the command line, use this command: Use the -encipher option to scramble your image so that it is unrecognizable. The option requires a filename that contains your passphrase. In this example we scramble an image and save it in the PNG format: Here we encipher an image using another image as the passphrase: Use the -decipher option to unscramble your image so that it is recognizable once again. The option requires a filename that contains your passphrase. In this example we unscramble an image and save it in the JPEG format: The latter image was produced with this command: The 25x25% argument divides the image into 16 tiles to perform local contrast enhancement. The image dimensions are 1500x1000 so the tiles are exactly 375x250 pixels each. Rather than a percentage, you can specify the tile dimensions directly with 375x250. For tile sizes that do not divide evenly into the image dimensions, CLAHE utilizes virtual pixels, as such the results can vary slightly based on your chosen virtual pixel method. For example, Notice the !. That forces the tile size to exactly 300x300 pixels, whereas without the !, the tile size respects the aspect ratio of the image and results in tile dimensions of 300x200. ImageMagick supports color profiles, however, for images without a profile or a declaration of colorspace, ImageMagick assumes non-linear sRGB. Most image processing algorithms assume a linear colorspace, therefore it might be prudent to convert to linear color or remove the gamma function before certain image processing algorithms are applied. For example, To declare that an image is linear RGB rather than sRGB, you can use the set option: Note that declaring an image as linear is not the same as converting the image to linear. Declaring it is linear only sets the meta data and does not change the pixel data. Whereas converting to linear actually changes the pixel data as described in more detail below. By default, converting color images to grayscale returns non-linear gray. To instead convert to linear gray, use the -set or -intensity or -grayscale options: The same concept is needed when separating channels. Normally, the conversion to separate each channel of an sRGB color image produces separate non-linear grayscale images. However the same concept can be applied, if it is desired to keep the separate channels as linear grayscale. For example, the following produces linear grayscale channels. When separating and recombining channels, with potential intermediate processing, it is important to identify the colorspace used, especially during the recombination. For example, In the above example, the separated channels are non-linear and the default for -combine is to assume non-linear channels. So the result is the same as the input.magick logo: logo.gif
+
magick logo: logo.gif
identify logo.gif
magick identify -list configure
+magick identify -list configure
magick identify -list format
+magick identify -list format
magick identify -list format
+magick identify -list format
magick animate movie.gif
+magick animate movie.gif
magick animate *.jpg
+magick animate *.jpg
Distributed Pixel Cache
magick -distribute-cache 6668 & // start on 192.168.100.50
+
magick -distribute-cache 6668 & // start on 192.168.100.50
magick -define registry:cache:hosts=192.168.100.50:6668 myimage.jpg -sharpen 5x2 mimage.png
@@ -448,13 +448,13 @@
magick -limit memory 2GB -limit map 4GB -define registry:temporary-path=/data/tmp ...
+
magick -limit memory 2GB -limit map 4GB -define registry:temporary-path=/data/tmp ...
magick image.tif image.mpc
+
magick image.tif image.mpc
magick image.mpc -crop 100x100+0+0 +repage 1.png
magick image.mpc -crop 100x100+100+0 +repage 2.png
magick image.mpc -crop 100x100+200+0 +repage 3.png
@@ -529,30 +529,30 @@
Large Image Support
magick logo: -resize 250000x250000 logo.miff
+
magick logo: -resize 250000x250000 logo.miff
magick -define registry:temporary-path=/data/tmp logo: \
-resize 250000x250000 logo.miff
+magick -define registry:temporary-path=/data/tmp logo: \
-resize 250000x250000 logo.miff
magick -define registry:temporary-path=/data/tmp -limit memory 16mb \
+
magick -define registry:temporary-path=/data/tmp -limit memory 16mb \
logo: -resize 250000x250000 logo.miff
magick -define registry:temporary-path=/data/tmp -limit area 0 \
+
magick -define registry:temporary-path=/data/tmp -limit area 0 \
logo: -resize 250000x250000 logo.miff
magick -monitor -limit memory 2GiB -limit map 4GiB -define registry:temporary-path=/data/tmp \
+
magick -monitor -limit memory 2GiB -limit map 4GiB -define registry:temporary-path=/data/tmp \
logo: -resize 250000x250000 logo.miff
magick -distribute-cache 6668 & // start on 192.168.100.50
+
magick -distribute-cache 6668 & // start on 192.168.100.50
magick -distribute-cache 6668 & // start on 192.168.100.51
magick -limit memory 2mb -limit map 2mb -limit disk 2gb \
-define registry:cache:hosts=192.168.100.50:6668,192.168.100.51:6668 \
@@ -726,13 +726,13 @@
magick identify -version
+
magick identify -version
Features: DPC Cipher Modules OpenCL OpenMP(4.5)
magick image.png -convolve '-1, -1, -1, -1, 9, -1, -1, -1, -1' convolve.png
+
magick image.png -convolve '-1, -1, -1, -1, 9, -1, -1, -1, -1' convolve.png
magick logo: logo.mgk
+
magick logo: logo.mgk
display logo.mgk
@@ -1491,7 +1491,7 @@
magick logo: -process \"analyze\" -verbose info:
+
magick logo: -process \"analyze\" -verbose info:
Image: logo:
Format: LOGO (ImageMagick Logo)
Class: PseudoClass
diff --git a/include/cipher.php b/include/cipher.php
index bb8e6340..f4a79def 100644
--- a/include/cipher.php
+++ b/include/cipher.php
@@ -10,17 +10,17 @@
magick rose.jpg -encipher passphrase.txt rose.png
+magick rose.jpg -encipher passphrase.txt rose.png
magick rose.jpg -encipher smiley.gif rose.png
+magick rose.jpg -encipher smiley.gif rose.png
Decipher an Image
magick rose.png -decipher passphrase.txt rose.jpg
+magick rose.png -decipher passphrase.txt rose.jpg
Encipher and Decipher Caveats
diff --git a/include/clahe.php b/include/clahe.php
index 132e4534..79e8934a 100644
--- a/include/clahe.php
+++ b/include/clahe.php
@@ -20,10 +20,10 @@
magick mountains.jpg -clahe 25x25%+128+3 mountains-clahe.jpg
+magick mountains.jpg -clahe 25x25%+128+3 mountains-clahe.jpg
magick mountains.jpg -virtual-pixel mirror -clahe 300x300+128+3! mountains-clahe.jpg
+magick mountains.jpg -virtual-pixel mirror -clahe 300x300+128+3! mountains-clahe.jpg
magick myimage.jpg -colorspace RGB -resize 200% -colorspace sRGB mybigimage.jpg
+magick myimage.jpg -colorspace RGB -resize 200% -colorspace sRGB mybigimage.jpg
magick myimage.png -set colorspace RGB myRGBimage.png
+magick myimage.png -set colorspace RGB myRGBimage.png
+
convert myimage.png -colorspace LinearGray myRGBimage.png
convert myimage.png -colorspace RGB -colorspace Gray myRGBimage.png
convert myimage.png -intensity Rec709luminance -colorspace gray myRGBimage.png
@@ -29,27 +29,27 @@
magick myimage.png -colorspace RGB -separate myimage_channels_%d.png
+magick myimage.png -colorspace RGB -separate myimage_channels_%d.png
magick myimage.png -separate myimage_channels_%d.png
+
magick myimage.png -separate myimage_channels_%d.png
magick myimage_channels_*.png -combine myimage2.png
magick myimage.png -set colorspace RGB -separate myimage_channels_%d.png +magick myimage.png -set colorspace RGB -separate myimage_channels_%d.png magick myimage_channels_*.png -set colorspace RGB -combine -colorspace sRGB myimage2.pngWhen converting to another colorspace and back, such as between sRGB and HSL, the following two commands handle the first case of non-linear channels and the second case of linear channels:
-magick myimage.png -colorspace HSL -separate myimage_channels_%d.png +magick myimage.png -colorspace HSL -separate myimage_channels_%d.png magick myimage_channels_*.png -set colorspace HSL -combine -colorspace sRGB myimage2.png-magick myimage.png -set colorspace RGB -colorspace HSL -separate myimage_channels_%d.png +magick myimage.png -set colorspace RGB -colorspace HSL -separate myimage_channels_%d.png magick myimage_channels_*.png -set colorspace HSL -combine -colorspace RGB -set colorspace sRGB myimage2.pngA majority of the image formats assume an sRGB colorspace (e.g. JPEG, PNG, etc.). A few support only linear RGB (e.g. EXR, DPX, CIN, HDR) or only linear GRAY. A few formats support CMYK. For example JPG does, but PNG does not. Then there is the occasional format that also supports LAB (that is CieLAB) (e.g. TIFF, PSD, JPG, JP2). For additional information, see the Colorspace and Supported Formats pages.
diff --git a/include/color.php b/include/color.php index afe7c652..b6e6ecb6 100644 --- a/include/color.php +++ b/include/color.php @@ -1,4 +1,5 @@+Example Usage • Color Model Specification • List of Color Names
A number of ImageMagick options and methods take a color as an argument. The color can then be given as a color name (there is a limited but large set of these; see below) or it can be given as a set of numbers (in decimal or hexadecimal), each corresponding to a channel in an RGB or RGBA color model. HSL, HSLA, HSB, HSBA, CMYK, or CMYKA color models may also be specified. These topics are briefly described in the sections below.
@@ -9,7 +10,7 @@Each of the following commands produces the same lime border around the image. (Use "double quotes" for Windows.)
-magick -bordercolor lime -border 10 image.jpg image.png +magick -bordercolor lime -border 10 image.jpg image.png magick -bordercolor '#0f0' -border 10 image.jpg image.png magick -bordercolor '#00ff00' -border 10 image.jpg image.png magick -bordercolor 'rgb(0,255,0)' -border 10 image.jpg image.png diff --git a/include/command-line-options.php b/include/command-line-options.php index 05f6feb4..f775d64e 100644 --- a/include/command-line-options.php +++ b/include/command-line-options.php @@ -392,7 +392,7 @@ who have used the standard printf()' C-library function. As an example, the command -magick logo: rose: -morph 15 my%02dmorph.jpg +magick logo: rose: -morph 15 my%02dmorph.jpgwill create a sequence of 17 images (the two given plus 15 more created by @@ -453,19 +453,19 @@ information
--affine sx,0,0,sy +-affine sx,0,0,syTranslation by a displacement (tx, ty) is accomplished like so:
--affine 1,0,0,1,tx,ty +-affine 1,0,0,1,tx,tyRotate clockwise about the origin (the upper left-hand corner) by an angle a by letting c = cos(a), s = sin(a), and using the following.
--affine c,s,-s,c +-affine c,s,-s,cThe cumulative effect of a sequence of -affine @@ -1086,7 +1086,7 @@ function. All achievable slopes are zero or positive.
For example,
--caption "%m:%f %wx%h" bird.miff +-caption "%m:%f %wx%h" bird.miffproduces an image caption of MIFF:bird.miff 512x480 (assuming @@ -1271,18 +1271,18 @@ function. All achievable slopes are zero or positive.
For example, to create 3 grayscale images from the red, green, and blue channels of an image, use:
--channel-fx "red; green; blue"+-channel-fx "red; green; blue"A channel without an operation symbol implies separate (i.e, semicolon).
Here we take an sRGB image and a grayscale image and inject the grayscale image into the alpha channel:
-magick wizard.png mask.pgm -channel-fx '| gray=>alpha' wizard-alpha.png +magick wizard.png mask.pgm -channel-fx '| gray=>alpha' wizard-alpha.pngUse a similar command to define a read mask:
-magick wizard.png mask.pgm -channel-fx '| gray=>read-mask' wizard-mask.png+magick wizard.png mask.pgm -channel-fx '| gray=>read-mask' wizard-mask.pngIn this example, we compute the mean RGB value for all opaque pixels of an image:
-magick wizard-alpha.png -channel-fx "alpha=>read-mask" -channel rgb -format "%[fx:mean]\n" info:+magick wizard-alpha.png -channel-fx "alpha=>read-mask" -channel rgb -format "%[fx:mean]\n" info:Add -debug pixel prior to the -channel-fx option to track the channel morphology.
@@ -1341,7 +1341,7 @@ function. All achievable slopes are zero or positive.For example, in the command
-magick cockatoo.tif -clip -negate negated.tif +magick cockatoo.tif -clip -negate negated.tifonly the pixels within the clipping path are negated.
@@ -1526,7 +1526,7 @@ function. All achievable slopes are zero or positive.As an example, to add contrast to an image with offsets, try this command:
-magick kittens.jpg -color-matrix \ +magick kittens.jpg -color-matrix \ " 1.5 0.0 0.0 0.0, 0.0, -0.157 \ 0.0 1.5 0.0 0.0, 0.0, -0.157 \ 0.0 0.0 1.5 0.0, 0.0, -0.157 \ @@ -1685,7 +1685,7 @@ function. All achievable slopes are zero or positive. Thus, in the following example, the final image should be a copy of the original. -magick original.png -channel RGB -separate sepimage.png +magick original.png -channel RGB -separate sepimage.png convert sepimage-0.png sepimage-1.png sepimage-2.png -channel RGB \ -combine imagecopy.png@@ -1715,7 +1715,7 @@ function. All achievable slopes are zero or positive.For example,
--comment "%m:%f %wx%h" bird.miff +-comment "%m:%f %wx%h" bird.miffproduces an image comment of MIFF:bird.miff 512x480 (assuming @@ -1730,12 +1730,12 @@ function. All achievable slopes are zero or positive.
This is a convert version of "compare" for two same sized images. The syntax is as follows, but other metrics are allowed.
-magick image.png reference.png -metric RMSE -compare \
difference.png +magick image.png reference.png -metric RMSE -compare \
difference.pngTo get the metric value use the string format "%[distortion]".
-magick image.png reference.png -metric RMSE -compare -format \ +magick image.png reference.png -metric RMSE -compare -format \ "%[distortion]" info:@@ -1871,7 +1871,7 @@ function. All achievable slopes are zero or positive.For a more pronounced effect you can repeat the option:
-magick rose: -contrast -contrast rose_c2.png +magick rose: -contrast -contrast rose_c2.png@@ -2026,7 +2026,7 @@ function. All achievable slopes are zero or positive.For example, to log cache and blob events, use.
-magick -debug "Cache,Blob" rose: rose.png +magick -debug "Cache,Blob" rose: rose.pngThe User domain is normally empty, but developers can log user @@ -2111,14 +2111,14 @@ function. All achievable slopes are zero or positive.
See ImageMagick Defines for a list of recognized defines. For example:
-magick bilevel.tif -define ps:imagemask eps3:stencil.ps +magick bilevel.tif -define ps:imagemask eps3:stencil.psSet attributes of the image registry by prefixing the value with registry:. For example, to set a temporary path to put work files, use:
--define registry:temporary-path=/data/tmp +-define registry:temporary-path=/data/tmp@@ -2685,7 +2685,7 @@ function. All achievable slopes are zero or positive. used to group the 4 sets of coordinate pairs, to make it easier to read and understand. -magick rose: -virtual-pixel black \ +magick rose: -virtual-pixel black \ -distort Perspective '0,0,0,0 0,45,0,45 69,0,60,10 69,45,60,35' \ rose_3d_rotated.gif"@@ -2709,7 +2709,7 @@ function. All achievable slopes are zero or positive. using 'perspective' distortion. For example here we view a infinitely tiled 'plane' all the way to the horizon. -magick -size 90x90 pattern:checkerboard -normalize -virtual-pixel tile \ +magick -size 90x90 pattern:checkerboard -normalize -virtual-pixel tile \ -distort perspective '0,0,5,45 89,0,45,46 0,89,0,89 89,89,89,89' \ checks_tiled.jpg@@ -2916,7 +2916,7 @@ function. All achievable slopes are zero or positive.As an example, to define a circle centered at 100,100 that extends to 150,150 use:
--draw 'circle 100,100 150,150' +-draw 'circle 100,100 150,150'The Bezier primitive creates a spline curve and requires three @@ -2933,7 +2933,7 @@ function. All achievable slopes are zero or positive.
path primitive or to draw multiple four-point bezier segments with the start and end knots of each successive segment repeated. For example: --draw 'bezier 20,50 45,100 45,0 70,50' +-draw 'bezier 20,50 45,100 45,0 70,50' -draw 'bezier 70,50 95,100 95,0 120,50'@@ -2950,7 +2950,7 @@ function. All achievable slopes are zero or positive. image keyword with the composite operator, image location, image size, and filename: --draw 'image SrcOver 100,100 225,225 image.jpg' +-draw 'image SrcOver 100,100 225,225 image.jpg'You can use 0,0 for the image size, which means to use the actual @@ -2970,7 +2970,7 @@ function. All achievable slopes are zero or positive.
For example, the following annotates the image with Works like magick! for an image titled bird.miff.
--draw "text 100,100 'Works like magick!'"+-draw "text 100,100 'Works like magick!'"See the -annotate option for another convenient way to annotate an image with text.
@@ -2978,7 +2978,7 @@ function. All achievable slopes are zero or positive.The rotate primitive rotates subsequent shape primitives and text primitives about the origin of the main image:
--draw "rotate 45 text 10,10 'Works like magick!'"+-draw "rotate 45 text 10,10 'Works like magick!'"The translate primitive translates subsequent shape and text primitives.
@@ -3311,7 +3311,7 @@ function (its frequency), and thus determines the number of 'waves' that will display. If the aspect ratio of the input image isn't exactly 4:3, then the image is centered on an 800x600 black canvas: -magick input.jpg -resize 800x600 -background black -compose Copy \ +magick input.jpg -resize 800x600 -background black -compose Copy \ -gravity center -extent 800x600 -quality 92 output.jpg@@ -3319,7 +3319,7 @@ function (its frequency), and thus determines the number of 'waves' that willThe following command crops a JPEG image so that it has a 4:3 ratio:
-magick input.jpg -extent 4:3 -quality 92 output.jpg +magick input.jpg -extent 4:3 -quality 92 output.jpgAppend < to pad only if the image is smaller than the specified size and not crop if the image is larger (i.e. no-op). Append > to crop only if the image is larger than the specified size and not extend if the image is smaller. (i.e. no-op).
@@ -3335,7 +3335,7 @@ function (its frequency), and thus determines the number of 'waves' that willThis option is most useful for extracting a subregion of a very large raw image. Note that these two commands are equivalent:
-magick -size 16000x16000 -depth 8 -extract 640x480+1280+960 \ +magick -size 16000x16000 -depth 8 -extract 640x480+1280+960 \ image.rgb image.png", convert -size 16000x16000 -depth 8 'image.rgb[640x480+1280+960]' \ image.rgb image.png" @@ -3343,14 +3343,14 @@ function (its frequency), and thus determines the number of 'waves' that willIf you omit the offsets, as in
-magick -size 16000x16000 -depth 8 -extract 640x480 \ +magick -size 16000x16000 -depth 8 -extract 640x480 \ image.rgb image.pngthe image is resized to the specified dimensions instead, equivalent to:
-magick -size 16000x16000 -depth 8 -resize 640x480 image.rgb image.png +magick -size 16000x16000 -depth 8 -resize 640x480 image.rgb image.png@@ -3422,13 +3422,13 @@ function (its frequency), and thus determines the number of 'waves' that will PFM, EXR and PNG are the recommended image formats to use. All of these formats, except PNG support multi-frame images. So for example, -magick image.png -fft fft_image.miff +magick image.png -fft fft_image.miffgenerates a magnitude image as fft_image.miff[0] and a phase image as fft_image.miff[1]. Similarly,
-magick image.png -fft fft_image.png +magick image.png -fft fft_image.pnggenerates a magnitude image as fft_image-0.png and a phase image @@ -3454,7 +3454,7 @@ function into what is usually called the spectrum. A log function is used to enhance the darker values more in comparison to the lighter values. This can be done, for example, as follows:
-magick fft_image.miff[0] -contrast-stretch 0 \ +magick fft_image.miff[0] -contrast-stretch 0 \ -evaluate log 1000 fft_image_spectrum.png"@@ -3689,7 +3689,7 @@ function to be used as a windowing function for these IIR filters.For example, to get a 8 lobe jinc windowed sinc filter (Genseng filter?):
-magick image.png \ +magick image.png \ -filter sinc \ -set filter:window=jinc \ -set filter:lobes=8 \ @@ -3698,7 +3698,7 @@ function to be used as a windowing function for these IIR filters.Or a raw un-windowed Sinc filter with 4 lobes:
-magick image.png \ +magick image.png \ -set filter:filter=sinc \ -set filter:lobes=4 \ -resize 150% image.jpg" @@ -3708,7 +3708,7 @@ function to be used as a windowing function for these IIR filters. a 'Box' filter. For example the 'Welch parabolic windowing function. -magick null: -define filter:filter=Box \ +magick null: -define filter:filter=Box \ -define filter:window=Welch \ -define filter:support=1.0 \ -define filter:verbose=1 \ @@ -4099,7 +4099,7 @@ function to be used as a windowing function for these IIR filters. display gamma; e.g., if your image is sRGB and you want to write a PNG gAMA chunk, use -magick input.png +gamma .45455 output.png +magick input.png +gamma .45455 output.png(0.45455 is 1/2.2)
@@ -4188,7 +4188,7 @@ function to be used as a windowing function for these IIR filters. region itself, which is centered at the pixel coordinate (60,70). () -magick image.png -gravity Center -region 10x10-40+20 \ +magick image.png -gravity Center -region 10x10-40+20 \ -negate output.png@@ -4215,7 +4215,7 @@ function to be used as a windowing function for these IIR filters.For example, to convert an image to (linear) Rec709Luminance grayscale, type:
-magick in.png -grayscale Rec709Luminance out.png +magick in.png -grayscale Rec709Luminance out.pngwhich is equivalent to:
@@ -4226,12 +4226,12 @@ function to be used as a windowing function for these IIR filters.Similarly, to convert an image to (non-linear) Rec709Luma grayscale, type:
-magick in.png -grayscale Rec709Luma out.png +magick in.png -grayscale Rec709Luma out.pngwhich is equivalent to:
-magick in.png -colorspace Gray out.png +magick in.png -colorspace Gray out.pngNote that a 'colorspace' intensity method will produce the same result @@ -4262,7 +4262,7 @@ function to be used as a windowing function for these IIR filters. can apply any color transformation to the Hald image and then use this option to apply the transform to the image.
-magick image.png hald.png -hald-clut transform.png +magick image.png hald.png -hald-clut transform.pngThis option provides a convenient method for you to use Gimp or Photoshop @@ -4371,12 +4371,12 @@ function to be used as a windowing function for these IIR filters.
For example, depending upon the image format used to store the result of the -fft, one would use either
-magick fft_image.miff -ift fft_image_ift.png +magick fft_image.miff -ift fft_image_ift.pngor
-magick fft_image-0.png fft_image-1.png -ift fft_image_ift.png +magick fft_image-0.png fft_image-1.png -ift fft_image_ift.pngThe resulting image may need to be cropped due to padding introduced when @@ -5284,7 +5284,7 @@ function.
list" to get a complete listing of all the "-list" arguments available: -magick identify -list list +magick identify -list list@@ -5318,7 +5318,7 @@ function.\ No newline at end of file diff --git a/include/composite.php b/include/composite.php index aca0604a..cf7bc80a 100644 --- a/include/composite.php +++ b/include/composite.php @@ -8,7 +8,7 @@For example:
-magick -debug coder -log "%u %m:%l %e" in.gif out.png +magick -debug coder -log "%u %m:%l %e" in.gif out.pngThe default behavior is to print all of the components.
@@ -5548,7 +5548,7 @@ function.Use -set attribute of 'option:modulate:colorspace' to specify which colorspace to modulate. Choose from HCL, HCLp, HSB, HSI, HSL (the default), HSV, HWB, or LCH (LCHab). For example,
-magick image.png -set option:modulate:colorspace hsb -modulate 120,90 modulate.png +magick image.png -set option:modulate:colorspace hsb -modulate 120,90 modulate.png@@ -5824,7 +5824,7 @@ function.diff --git a/include/compare.php b/include/compare.php index 13e2001a..663b2f10 100644 --- a/include/compare.php +++ b/include/compare.php @@ -8,7 +8,7 @@Use media as shorthand to specify the dimensions (widthxheight) of the PostScript page in dots per inch or a TEXT page in pixels. The choices for paper sizes are: 4x6, 5x7, 7x9, 8x10, 9x11, 9x12, 10x13, 10x14, 11x17, 4A0, 2A0, a0, a1, a2, a3, a4, a4small, a5, a6, a7, a8, a9, a10, archa, archb, archC, archd, arche, b0, b1, b10, b2, b3, b4, b5, b6, b7, b8, b9, c0, c1, c2, c3, c4, c5, c6, c7, csheet, dsheet, esheet, executive, flsa, flse, folio, halfletter, isob0, isob1, isob10, isob2, isob3, isob4, isob5, isob6, isob7, isob8, isob9, jisb0, jisb1, jisb2, jisb3, jisb4, jisb5, jisb6, ledger, legal, letter, lettersmall, monarch, quarto, statement, tabloid. To determine the cooresponding size in pixels at 72DPI, use this command for example:
-magick xc: -format "%[papersize:a4]" info:+magick xc: -format "%[papersize:a4]" info:This option is also used to place subimages when writing to a multi-image format that supports offsets, such as GIF89 and MNG. When used for this @@ -6039,7 +6039,7 @@ function.
Set -define precision:highres-transform=true to increase the transform precision. Note, there is a slight performance penalty as the high-precision transform is floating point rather than unsigned.
-magick cockatoo.jpg profile.exif +magick cockatoo.jpg profile.exifIt is important to note that results may depend on whether or not the @@ -6049,7 +6049,7 @@ function.
command-line. For instance, in the following example, if the original image is CMYK with profile, a CMYK-CMYK-RGB conversion results. -magick CMYK.tif -profile "CMYK.icc" -profile "RGB.icc" RGB.tiff +magick CMYK.tif -profile "CMYK.icc" -profile "RGB.icc" RGB.tiffFurthermore, since ICC profiles are not necessarily symmetric, extra @@ -6354,7 +6354,7 @@ function.
coding. If your image is gamma-corrected, you can remove the nonlinear gamma correction, apply the transform, then restore it like this: -magick portrait.jpg -gamma .45455 -resize 25% -gamma 2.2 \ +magick portrait.jpg -gamma .45455 -resize 25% -gamma 2.2 \ -quality 92 passport.jpg@@ -6622,14 +6622,14 @@ function.This option can also associate a colorspace or profile with your image. For example,
-magick image.psd -set profile ISOcoated_v2_eci.icc image-icc.psd +magick image.psd -set profile ISOcoated_v2_eci.icc image-icc.psdSome 'properties' must be defined in a specific way to be used. For example only 'properties' prefixed with "filename:" can be used to modify the output filename of an image. For example
-magick rose: -set filename:mysize '%wx%h' 'rose_%[filename:mysize].png' +magick rose: -set filename:mysize '%wx%h' 'rose_%[filename:mysize].png'If the setting value is prefixed with "option:" the setting will @@ -6639,7 +6639,7 @@ function.
in a way that allows you to use them in a completely different image, even if the original image has long since been modified or destroyed. For example: -magick rose: -set option:rosesize '%wx%h' -delete 0 \ +magick rose: -set option:rosesize '%wx%h' -delete 0 \ label:'%[rosesize]' label_size_of_rose.gif"@@ -6656,7 +6656,7 @@ function. the commandline option as shown below or by setting the profile via a programming interface: -magick in.png -set profile PNG-chunk-x:<filename> out.png +magick in.png -set profile PNG-chunk-x:<filename> out.pngwhere x is a location flag and @@ -6671,7 +6671,7 @@ function.
subsequent profiles from overwriting the preceding ones, e.g., -magick in.png -set profile PNG-chunk-b01:file01 \ +magick in.png -set profile PNG-chunk-b01:file01 \ -profile PNG-chunk-b02:file02 out.png@@ -6750,7 +6750,7 @@ function. commute, i.e., the order matters in a sequence of shears. For example, the following two commands are not equivalent. -magick logo: -shear 20x0 -shear 0x60 logo-sheared.png +magick logo: -shear 20x0 -shear 0x60 logo-sheared.png convert logo: -shear 0x60 -shear 20x0 logo-sheared.png@@ -6758,7 +6758,7 @@ function. for the amount of empty space created; the command that follows generates a smaller image, and so is a better choice in terms of time and space. -magick logo: -shear 20x60 logo-sheared.png +magick logo: -shear 20x60 logo-sheared.png@@ -7211,7 +7211,7 @@ function. channel. The green, blue, and alpha channels (if present) would be unchanged. -diff --git a/include/command-line-tools.php b/include/command-line-tools.php index f66db00c..27c55bba 100644 --- a/include/command-line-tools.php +++ b/include/command-line-tools.php @@ -25,6 +25,6 @@magick in.png -channel red -threshold 50% out.png +magick in.png -channel red -threshold 50% out.pngAs (possibly) impractical but instructive examples, the following would @@ -7219,7 +7219,7 @@ function.
input image. -magick in.png -channel RGB -threshold 100% black.png +magick in.png -channel RGB -threshold 100% black.png convert in.png -channel RGB -threshold -1 white.png@@ -7312,7 +7312,7 @@ function.This option applies the transformation matrix from a previous -affine option.
-magick -affine 2,2,-2,2,0,0 -transform bird.ppm bird.jpg +magick -affine 2,2,-2,2,0,0 -transform bird.ppm bird.jpg@@ -7451,7 +7451,7 @@ function. example, to prevent a JPEG from being written in grayscale format even though only gray pixels are present, use. -magick bird.png -type TrueColor bird.jpg +magick bird.png -type TrueColor bird.jpgSimilarly, use -type TrueColorAlpha to force the diff --git a/include/command-line-processing.php b/include/command-line-processing.php index 4227c7c9..1e75a076 100644 --- a/include/command-line-processing.php +++ b/include/command-line-processing.php @@ -4,11 +4,11 @@
The ImageMagick command-line tools can be as simple as this:
-magick image.jpg image.png+magick image.jpg image.pngOr it can be complex with a plethora of options, as in the following:
-magick label.gif +matte \ +magick label.gif +matte \ \( +clone -shade 110x90 -normalize -negate +clone -compose Plus -composite \) \ \( -clone 0 -shade 110x50 -normalize -channel BG -fx 0 +channel -matte \) \ -delete 0 +swap -compose Multiply -composite button.gif");@@ -33,7 +33,7 @@Given the complexity of the rendering, you might be surprised it is accomplished by a single command-line:
-magick -size 320x90 canvas:none -stroke snow4 -size 1x90 -tile gradient:white-snow4 \ +magick -size 320x90 canvas:none -stroke snow4 -size 1x90 -tile gradient:white-snow4 \ -draw 'roundrectangle 16, 5, 304, 85 20,40' +tile -fill snow \ -draw 'roundrectangle 264, 5, 304, 85 20,40' -tile gradient:chartreuse-green \ -draw 'roundrectangle 16, 5, 180, 85 20,40' -tile gradient:chartreuse1-chartreuse3 \ @@ -46,7 +46,7 @@ -append -background white -gravity center -extent 320x200 cylinder_shaded.pngRun this script contributed by Geemack. You'll get a glimpse of the power and versatility of the ImageMagick command-line:
-magick -background none -size 960x960 xc:black \( xc:darkred -duplicate 1 +append \) \ +magick -background none -size 960x960 xc:black \( xc:darkred -duplicate 1 +append \) \ xc:gold \( xc:teal -duplicate 2 +append \) -modulate 100,100,"%[fx:rand()*200]" \ xc:white -scale x1 +append -write mpr:clut +delete radial-gradient: mpr:clut \ -clut -scale 100x4% -wave "%[fx:rand()*24+24]"x"%[fx:w/ceil(rand()*4+1)]" -extent "%[w]x%[w]" \ @@ -106,7 +106,7 @@In Linux shells, certain characters such as the asterisk (*) and question mark (?) automagically cause lists of filenames to be generated based on pattern matches. This feature is known as globbing. ImageMagick supports filename globbing for systems, such as Windows, that does not natively support it. For example, suppose you want to convert 1.jpg, 2.jpg, 3.jpg, 4.jpg, and 5.jpg in your current directory to a GIF animation. You can conveniently refer to all of the JPEG files with this command:
-magick *.jpg images.gif+magick *.jpg images.gifExplicit Image Format
Images are stored in a myriad of image formats including @@ -125,43 +125,43 @@ so we explicitly set one:
-magick -size 640x480 -depth 8 rgb:image image.png+magick -size 640x480 -depth 8 rgb:image image.pngBuilt-in Images and Patterns
ImageMagick has a number of built-in images and patterns. To utilize the checkerboard pattern, for example, use:
-magick -size 640x480 pattern:checkerboard checkerboard.png+magick -size 640x480 pattern:checkerboard checkerboard.pngSTDIN, STDOUT, and file descriptors
Linux and Windows permit the output of one command to be piped to the input of another. ImageMagick permits image data to be read and written from the standard streams STDIN (standard in) and STDOUT (standard out), respectively, using a pseudo-filename of -. In this example we pipe the output of to the program:
-magick logo: gif:- | magick display gif:-+magick logo: gif:- | magick display gif:-The second explicit format "gif:" is optional in the preceding example. The GIF image format has a unique signature within the image so ImageMagick's command can readily recognize the format as GIF. The program also accepts STDIN as input in this way:
-magick rose: gif:- | magick - -resize "200%" bigrose.jpg'+magick rose: gif:- | magick - -resize "200%" bigrose.jpg'Other pipes can be accessed via their file descriptors (as of version 6.4.9-3). The file descriptors 0, 1, and 2 are reserved for the standard streams STDIN, STDOUT, and STDERR, respectively, but a pipe associated with a file descriptor number N>2 can be accessed using the pseudonym fd:N. (The pseudonyms fd:0 and fd:1 can be used for STDIN and STDOUT.) The next example shows how to append image data piped from files with descriptors 3 and 4 and direct the result to the file with descriptor number 5.
-magick fd:3 fd:4 -append fd:5+magick fd:3 fd:4 -append fd:5When needed, explicit image formats can be given as mentioned earlier, as in the following.
-magick gif:fd:3 jpg:fd:4 -append tif:fd:5+magick gif:fd:3 jpg:fd:4 -append tif:fd:5Selecting Frames
Some images formats contain more than one image frame. Perhaps you only want the first image, or the last, or some number of images in-between. You can specify which image frames to read by appending the image filename with the frame range enclosed in brackets. Here our image (an animated GIF) contains more than one frame but we only want the first:
-magick 'images.gif[0]' image.png+magick 'images.gif[0]' image.pngLinux shells generally interpret brackets so we enclosed the filename in quotes above. In a Windows command shell the brackets are not interpreted but using quotes doesn't hurt. However, in most cases the roles of single-quotes and double-quotes are reversed with respect to Linux and Windows, so Windows users should usually try double-quotes where we display single-quotes, and vice versa. @@ -170,14 +170,14 @@
You can read more than one image from a sequence with a frame range. For example, you can extract the first four frames of an image sequence:
-magick 'images.gif[0-3]' images.mng+magick 'images.gif[0-3]' images.mngThe default is to step one frame at a time so frames 0, 1, 2, and 3 are returned. Set the step to 2 with -define frames:step=2 and we instead get frames 0 and 2.
Finally, you can read more than one image from a sequence, out-of-order. The next command gets the fourth image in the sequence, followed by the third, and then the fifth:
-magick 'images.gif[3,2,4]' images.mng+magick 'images.gif[3,2,4]' images.mngNotice that in the last two commands, a single image is written. The output in this case, where the image type is MNG, is a multi-frame file because the MNG format supports multiple frames. Had the output format been JPG, which only supports single frames, the output would have consisted of separate frames. More about that below, in the section about the Output Filename.
@@ -186,37 +186,37 @@Raw images are a sequence of color intensities without additional meta information such as width, height, or image signature. With raw image formats, you must specify the image width and height but you can also specify a region of the image to read. In our example, the image is in the raw 8-bit RGB format and is 6000 pixels wide and 4000 pixels high. However, we only want a region of 600 by 400 near the center of the image:
-magick -size 6000x4000 -depth 8 'rgb:image[600x400+1900+2900]' image.jpg+magick -size 6000x4000 -depth 8 'rgb:image[600x400+1900+2900]' image.jpgYou can get the same results with the option:
-magick -size 6000x4000 -depth 8 -extract 600x400+1900+2900 rgb:image image.jpg+magick -size 6000x4000 -depth 8 -extract 600x400+1900+2900 rgb:image image.jpgInline Image Resize
It is sometimes convenient to resize an image as they are read. Suppose you have hundreds of large JPEG images you want to convert to a sequence of PNG thumbails:
-magick '*.jpg' -resize 120x120 thumbnail%03d.png+magick '*.jpg' -resize 120x120 thumbnail%03d.pngHere all the images are read and subsequently resized. It is faster and less resource intensive to resize each image as it is read:
-magick '*.jpg[120x120]' thumbnail%03d.png+magick '*.jpg[120x120]' thumbnail%03d.pngInline Image Crop
It is sometimes convenient to crop an image as they are read. Suppose you have hundreds of large JPEG images you want to convert to a sequence of PNG thumbails:
-magick '*.jpg' -crop 120x120+10+5 thumbnail%03d.png+magick '*.jpg' -crop 120x120+10+5 thumbnail%03d.pngHere all the images are read and subsequently cropped. It is faster and less resource-intensive to crop each image as it is read:
-magick '*.jpg[120x120+10+5]' thumbnail%03d.png+magick '*.jpg[120x120+10+5]' thumbnail%03d.pngFilename References
@@ -231,7 +231,7 @@We then expect this command:
-magick @myimages.txt mymovie.gif+magick @myimages.txt mymovie.gifto read the images frame001.jpg, frame002.jpg, and frame003.jpg and convert them to a GIF image sequence.
If the image path includes one or more spaces, enclose the path in quotes:
@@ -249,7 +249,7 @@ embedding a formatting character in the filename with a scene range. Consider the filename image-%d.jpg[1-5]. The command -magick image-%d.jpg[1-5]+magick image-%d.jpg[1-5]causes ImageMagick to attempt to read images with these filenames:
@@ -263,7 +263,7 @@Stream Buffering
By default, the input stream is buffered. To ensure information on the source file or terminal is read as soon as its available, set the buffer size to 0:
-magick logo: gif:- | magick display -define stream:buffer-size=0 gif:-+magick logo: gif:- | magick display -define stream:buffer-size=0 gif:-Command-line Options
@@ -293,7 +293,7 @@In this example, -channel applies to each of the images, since, as we mentioned, settings persist:
-magick -channel RGB wand.png wizard.png images.png+magick -channel RGB wand.png wizard.png images.pngImage Operator
@@ -312,7 +312,7 @@In this example, -negate negates the wand image but not the wizard:
-magick wand.png -negate wizard.png images.png+magick wand.png -negate wizard.png images.pngNote that an image operator will be applied to each images in an image sequence. For example, if you use option to resize a @@ -340,7 +340,7 @@
In this example, -append appends three images into one:
-magick mikayla.png picnic.png beach.png -append vacation.png+magick mikayla.png picnic.png beach.png -append vacation.pngImage Geometry
@@ -444,7 +444,7 @@ This fine image is 640 pixels wide and 480 pixels high. We say its dimensions are 640x480. When we give dimensions of an image, the width (the horizontal dimension) always precedes the height (the vertical dimension). This will be true when we speak of coordinates or offsets into an image, which will always be x–value followed by y. Just think of your high school algebra classes and the xy–plane. (Well, almost: our y–axis will always go downward!) -magick logo: -resize '200%' bigWiz.png +magick logo: -resize '200%' bigWiz.png magick logo: -resize '200x50%' longShortWiz.png magick logo: -resize '100x200' notThinWiz.png magick logo: -resize '100x200^' biggerNotThinWiz.png @@ -464,7 +464,7 @@ Here are a few more examples: -magick logo: -resize '100' wiz1.png +magick logo: -resize '100' wiz1.png magick logo: -resize 'x200' wiz2.png magick logo: -resize '100x200>' wiz3.png magick logo: -resize '100x200<' wiz4.png@@ -476,7 +476,7 @@Finally, use @ to specify the maximum area in pixels of an image, again while attempting to preserve aspect ratio. (Pixels take only integer values, so some approximation is always at work.) In the following example, an area of 10000 pixels is requested. The resulting file has dimensions 115x86, which has 9890 pixels.
-magick logo: -resize '10000@' wiz10000.png+magick logo: -resize '10000@' wiz10000.pngIn all the examples above and below, we have enclosed the geometry arguments within quotation marks. Doing so is optional in many cases, but not always. We must enclose the geometry specifications in quotation marks when using < or > to prevent these characters from being interpreted by the shell as file redirection. On Windows systems, the carat ^ needs to be within quotes, else it is ignored. To be safe, one should probably maintain a habit of enclosing all geometry arguments in quotes, as we have here.
@@ -487,7 +487,7 @@ option. This option allows many other options to modify the pixels within a specified rectangular subregion of an image. As such, it needs to be given the width and height of that region, and also an offset into the image, which is a pair of coordinates that indicate the location of the region within the larger image. Below, in the first example, we specify a region of size 100x200 to be located at the xy–coordinates x=10, y=20. Let's use the usual algebraic notation (x,y)=(10,20), for convenience. -magick logo: -region '100x200+10+20' -negate wizNeg1.png +magick logo: -region '100x200+10+20' -negate wizNeg1.png magick logo: -region '100x200-10+20' -negate wizNeg2.png magick logo: -gravity center -region '100x200-10+20' -negate wizNeg3.png@@ -503,7 +503,7 @@In school, your teacher probably permitted you to work on problems on a scrap of paper and then copy the results to your test paper. An image stack is similar. It permits you to work on an image or image sequence in isolation and subsequently introduce the results back into the command-line. The image stack is delineated with parenthesis. Image operators only affect images in the current stack. For example, we can limit the image rotation to just the wizard image like this:
-magick wand.gif \( wizard.gif -rotate 30 \) +append images.gif+magick wand.gif \( wizard.gif -rotate 30 \) +append images.gifNotice again that the parentheses are escaped by preceding them with @@ -540,14 +540,14 @@
Images can be stored in a myriad of image formats including the better known JPEG, PNG, TIFF and others. ImageMagick must know the desired format of the image before it is written. ImageMagick leverages the filename extension to determine the format. For example, image.jpg tells ImageMagick to write the image in the JPEG format. In some cases the filename does not identify the image format. In these cases, the image is written in the format it was originally read unless an explicit image format is specified. For example, suppose we want to write our image to a filename of image in the raw red, green, and blue intensity format:
-magick image.jpg rgb:image+magick image.jpg rgb:imageStandard Out
Linux permits the output of one command to be piped to another. ImageMagick permits piping one command to another with a filename of -. In this example we pipe the output of magick to the display program:
-magick logo: gif:- | magick display gif:-+magick logo: gif:- | magick display gif:-Here the explicit format is optional. The GIF image format has a signature that uniquely identifies it so ImageMagick can readily recognize the format as GIF.
@@ -562,7 +562,7 @@Or retrieve image properties to modify the image filename. For example, the command
-magick rose: -set filename:area '%wx%h' 'rose-%[filename:area].png'+magick rose: -set filename:area '%wx%h' 'rose-%[filename:area].png'writes an image with this filename:
@@ -571,7 +571,7 @@Finally to convert multiple JPEG images to individual PDF pages, use:
-magick *.jpg +adjoin page-%d.pdf+magick *.jpg +adjoin page-%d.pdfUse -define filename:literal=true to bypass interpretting embedded formatting characters and instead use the filename literally.
@@ -579,5 +579,5 @@By default, the output stream is buffered. To ensure information appears on the destination file or terminal as soon as written, set the buffer size to 0:
-magick -define stream:buffer-size=0 logo: gif:- | magick display gif:-+magick -define stream:buffer-size=0 logo: gif:- | magick display gif:-magick stream a lightweight tool to stream one or more pixel components of the image or portion of the image to your choice of storage formats. It writes the pixel components as they are read from the input image a row at a time making stream desirable when working with large images or when you require raw pixel components. Your installation may have direct ImageMagick version 6 compatibility links. If so, you can access the tools directly by referring to them by name. For example, -
magick identify -verbose myImage.png+magick identify -verbose myImage.pngWe list a few examples of the compare command here to illustrate its usefulness and ease of use. To get started, lets compare an image to one thats been sharpened:
-magick rose.jpg -sharpen 0x1 reconstruct.jpg +magick rose.jpg -sharpen 0x1 reconstruct.jpg magick compare rose.jpg reconstruct.jpg difference.png magick compare -compose src rose.jpg reconstruct.jpg difference.pngdiff --git a/include/compose.php b/include/compose.php index be502f12..7edb9914 100644 --- a/include/compose.php +++ b/include/compose.php @@ -1,4 +1,5 @@++This page descibed the Image composition methods that is used to define how two images should be merged together in various image operations. For the @@ -437,7 +438,7 @@ >-compose methods, those the argument and the method both need to be set separately. For example...
-magick ... -compose blend -define compose:args=50,50 -composite ...+magick ... -compose blend -define compose:args=50,50 -composite ...The following is a table of these special 'argumented' compose methods, with a brief summary of what they do. For more details see the equivalent @@ -597,4 +598,4 @@
To print a complete list of all the available compose operators, use -list compose.
-We list a few examples of the composite command here to illustrate its usefulness and ease of use. To get started, lets overlay a smiley face over a rose:
-magick composite -gravity center smile.gif rose: rose-over.png+magick composite -gravity center smile.gif rose: rose-over.pngmagick -size 70x70 canvas:none -fill red -draw 'circle 35,35 10,30' red-circle.png +magick -size 70x70 canvas:none -fill red -draw 'circle 35,35 10,30' red-circle.png magick -size 70x70 canvas:none -draw 'circle 35,35 35,20' -negate \ -channel A -gaussian-blur 0x8 white-highlight.png magick composite -compose atop -geometry -13-17 white-highlight.png red-circle.png red-ball.png@@ -34,10 +34,10 @@Or suppose you want to blend a bear into a stream seamlessly. Try this command:
-magick -verbose stream.jpg bear.jpg bear_mask.png -define compose:args=400x0.0002+100 \ +magick -verbose stream.jpg bear.jpg bear_mask.png -define compose:args=400x0.0002+100 \ -compose seamless-blend -geometry +30+30 -composite bear-in-stream.pngThe mask marks the area around the bear to blend. Seamless blending is an iterative process. Here, we limit the iterations to 400 or less if the blending converges (residual has an RMSE of less than 0.0002). The residual value (RMSE) is printed every 100 iterations. Note, seamless blending works most effectively when the HDRI feature is enabled.
-magick -verbose stream.jpg \( bear.jpg -read-mask only_bear.png \) bear_mask.png \ +magick -verbose stream.jpg \( bear.jpg -read-mask only_bear.png \) bear_mask.png \ -define compose:args=400x0.0002+100 -compose seamless-blend -geometry +30+30 -composite \ bear-in-stream.pngHere we create read mask that marks the foreground object from its background. No blending is applied to the foreground object, just its surroundings. The read-mask preserves the colors of the bear and prevents them from lightening as in the first example. Note that read-masks must be black on white background as opposed to normal masks, which are white on black background.
diff --git a/include/conjure.php b/include/conjure.php index 33d774b8..478cecbd 100644 --- a/include/conjure.php +++ b/include/conjure.php @@ -7,7 +7,7 @@We list a few examples of the conjure command here to illustrate its usefulness and ease of use. To get started, here is simple conjure command:
-magick conjure -dimensions 400x400 msl:incantation.msl +magick conjure -dimensions 400x400 msl:incantation.mslThe MSL script incantation.msl used above is here:
diff --git a/include/connected-components.php b/include/connected-components.php index 87a515aa..edcb0f60 100644 --- a/include/connected-components.php +++ b/include/connected-components.php @@ -5,13 +5,13 @@![]()
To identify the objects in this image, use this command:
-magick objects.gif -connected-components 4 -auto-level -depth 8 objects.png+magick objects.gif -connected-components 4 -auto-level -depth 8 objects.pngThe detected objects are uniquely labeled. Use auto leveling to visualize the detected objects:
Object statistics is useful to review. To display them, use this command:
-magick objects.gif -define connected-components:verbose=true -connected-components 4 objects.png+magick objects.gif -define connected-components:verbose=true -connected-components 4 objects.pngFive objects were detected in the source image with these statistics:
Objects (id: bounding-box centroid area mean-color): 0: 256x171+0+0 119.2,80.8 33117 srgb(0,0,0) @@ -23,7 +23,7 @@Add -define connected-components:exclude-header=true to show the objects without the header-line. Add -define connected-components:exclude-ids=true. Use -define connected-components:sort=area | width | height | x | y to sort the verbose connected components objects. By default, the objects are listed in decreasing area. Add -define connected-components:sort-order=increasing | decreasing to specify the sort order.
Use -connected-components 8 to visit 8 neighbors rather than 4. By default, neighbor colors must be exact to be part of a unique object. Use the -fuzz option to include pixels as part of an object that are close in color.
You might want to eliminate small objects by merging them with their larger neighbors. If so, use this command:
-magick objects.gif -define connected-components:area-threshold=410 -connected-components 4 \ +magick objects.gif -define connected-components:area-threshold=410 -connected-components 4 \ -auto-level objects.jpgHere are the expected results. Notice, how the small objects are now merged with the background.
@@ -48,7 +48,7 @@
You may want to remove certain objects. Use -define connected-components:remove-ids=list-of-ids (e.g. -define connected-components:remove-ids=2,4-5). Or use -define connected-components:keep-ids=list-of-ids to keep these objects and merge all others. For convenience, you can keep the top objects with this option: -define connected-components:keep-top=number-of-objects. Rather than object ids, you can instead remove or keep objects identified by there color, e.g. -define connected-components:keep-colors=red;green;blue.
Objects in your image may look homogeneous but have slightly different color values. By default, only pixels that match exactly are considered as part of a particular object. For slight variations of color in an object, use -fuzz. For example,
-magick star-map.png -fuzz 5% -define connected-components:verbose=true \ +magick star-map.png -fuzz 5% -define connected-components:verbose=true \ -define connected-components:mean-color=true -connected-components 4 stars.gifConnected Components
The algorithm walks through the pixels of a component, in the usual row-column order, looking for a component above or to the left. For the component at top-left, there are no components above or to the left to merge into. As a result, there are special cases where you need to rotate, repeat the connected components, then rotate back. For example
diff --git a/include/convert.php b/include/convert.php index 6beb854d..d20194e3 100644 --- a/include/convert.php +++ b/include/convert.php @@ -4,11 +4,11 @@We list a few examples of the magick command here to illustrate its usefulness and ease of use. To get started, lets convert an image in the JPEG format to PNG:
-magick rose.jpg rose.png+magick rose.jpg rose.pngNext, we reduce the image size before it is written to the PNG format:
-magick rose.jpg -resize 50% rose.png+magick rose.jpg -resize 50% rose.png@@ -22,7 +22,7 @@
You can combine multiple image-processing operations to produce complex results:
-magick -size 320x85 canvas:none -font Bookman-DemiItalic -pointsize 72 \ +magick -size 320x85 canvas:none -font Bookman-DemiItalic -pointsize 72 \ -draw "text 25,60 \'Magick\'" -channel RGBA -blur 0x6 -fill darkred -stroke magenta \ -draw "text 20,55 \'Magick\'" fuzzy-magick.png@@ -32,7 +32,7 @@or here we resize an image with improved quality:
-magick input.png -colorspace RGB +sigmoidal-contrast 11.6933 \ +magick input.png -colorspace RGB +sigmoidal-contrast 11.6933 \ -define filter:filter=Sinc -define filter:window=Jinc -define filter:lobes=3 \ -resize 400% -sigmoidal-contrast 11.6933 -colorspace sRGB output.png');diff --git a/include/defines.php b/include/defines.php index 44a466fc..e2275f91 100644 --- a/include/defines.php +++ b/include/defines.php @@ -1,4 +1,5 @@+diff --git a/include/identify.php b/include/identify.php index 0f33140b..a10e2ce7 100644 --- a/include/identify.php +++ b/include/identify.php @@ -118,11 +118,11 @@The -define command-line option adds specific global settings generally used to control coders and image processing operations.
@@ -20,7 +21,7 @@Such settings are global in scope, and affect all images and operations.
-magick bilevel.tif -define ps:imagemask eps3:stencil.ps+magick bilevel.tif -define ps:imagemask eps3:stencil.psSet attributes of the image registry by prefixing the value with registry:. For example, to set a temporary path to put work files, diff --git a/include/display.php b/include/display.php index eb17bd08..9707bea6 100644 --- a/include/display.php +++ b/include/display.php @@ -8,19 +8,19 @@
We list a few examples of the display command here to illustrate its usefulness and ease of use. To get started, lets display an image in the JPEG format:
-magick display rose.jpg+magick display rose.jpgTo tile a slate texture onto the root window, use:
-magick display -size 1280x1024 -window root slate.png+magick display -size 1280x1024 -window root slate.pngTo display a visual image directory of all your JPEG images, use:
-magick display 'vid:*.jpg'+magick display 'vid:*.jpg'The display program defaults to the X screen resolution. To display vector formats at their intended size, override the default resolution:
-magick display -density 72 drawing.svg+magick display -density 72 drawing.svgYou can find additional examples of using display in Graphics from the Command Line. Further discussion is available in More Graphics from the Command Line and Examples of ImageMagick Usage.
diff --git a/include/distribute-pixel-cache.php b/include/distribute-pixel-cache.php index 16f3644d..4a4b3daf 100644 --- a/include/distribute-pixel-cache.php +++ b/include/distribute-pixel-cache.php @@ -6,7 +6,7 @@ <policy domain="cache" name="shared-secret" value="passhrase" stealth="true"/>Here we create two distributed pixel caches and utilize them from our desktop:
-magick -distribute-cache 6668 & # start on 192.168.100.50 +magick -distribute-cache 6668 & # start on 192.168.100.50 magick -distribute-cache 6668 & # start on 192.168.100.51 magick -limit memory 1GiB -limit map 2GiB -limit disk 4GiB \ -define registry:cache:hosts=192.168.100.50:6668,192.168.100.51:6668 \ diff --git a/include/download.php b/include/download.php index a2ff0980..49ac6946 100644 --- a/include/download.php +++ b/include/download.php @@ -96,7 +96,7 @@Finally, to verify ImageMagick is working properly, type the following on the command line:
-magick logo: logo.gif +magick logo: logo.gif identify logo.gif display logo.gif@@ -156,7 +156,7 @@Finally, to verify ImageMagick is working properly, type the following on the command line:
-magick logo: logo.gif +magick logo: logo.gif identify logo.gif display logo.gif@@ -445,7 +445,7 @@To verify ImageMagick is working properly, type the following in a Command Prompt window:
-magick logo: logo.gif +magick logo: logo.gif magick identify logo.gif magick logo.gif win:@@ -453,7 +453,7 @@Note, use a double quote (") rather than a single quote (') for the ImageMagick command line under Windows:
-magick "e:/myimages/image.png" "e:/myimages/image.jpg"+magick "e:/myimages/image.png" "e:/myimages/image.jpg"Use two double quotes for VBScript scripts:
Set objShell = wscript.createobject("wscript.shell") objShell.Exec("magick ""e:/myimages/image.png"" ""e:/myimages/image.jpg""")diff --git a/include/escape.php b/include/escape.php index fca6fd33..d6123beb 100644 --- a/include/escape.php +++ b/include/escape.php @@ -645,7 +645,7 @@ now list all free-form string properties, artifacts, and options, (but not specific image attributes) using... -magick ... \ +magick ... \ -print "__Properties__\n%[*]" \ -print "__Artifacts__\n%[artifact:*]" \ -print "__Options__\n%[option:*]" \ diff --git a/include/formats.php b/include/formats.php index 7f8d0884..4419ecaa 100644 --- a/include/formats.php +++ b/include/formats.php @@ -6,7 +6,7 @@+To get a complete listing of which image formats are supported on your system, type
-magick identify -list format+magick identify -list formatOn some platforms, ImageMagick automagically processes these extensions: .gz for Zip compression, .Z for Linux compression, .bz2 for block compression, and .pgp for PGP encryption. For example, a PNM image called image.pnm.gz is automagically uncompressed.
@@ -35,7 +35,7 @@ results in linear RGB (essentially sRGB with the gamma function removed). For example, -magick image.jpg -colorspace RGB -resize 50% -colorspace sRGB resize.jpg+magick image.jpg -colorspace RGB -resize 50% -colorspace sRGB resize.jpgAs of IM 6.7.8-2 one can properly work in LAB colorspace whether or not Imagemagick is magick lab.tif -resize 50% resize.jpg
magick lab.tif -resize 50% resize.jpgAgain, it may not make sense for some image processing operators to work directly in LAB space, but ImageMagick permits it and generally returns @@ -638,7 +638,7 @@
RW Magick Persistent Registry This format permits you to write to and read images from memory. The image persists until you explicity delete it or the program exits. For example, let's use the MPR to create a checkerboard: - diff --git a/include/fx.php b/include/fx.php index 6fef30b7..a82c0928 100644 --- a/include/fx.php +++ b/include/fx.php @@ -19,7 +19,7 @@magick \( -size 15x15 canvas:black canvas:white -append \) \ +magick \( -size 15x15 canvas:black canvas:white -append \) \ \( +clone -flip \) +append -write mpr:checkers +delete \ -size 240x240 tile:mpr:checkers -delete registry:checkers board.pngThe expression can be simple:
-magick -size 64x64 canvas:black -channel blue -fx "1/2" fx_navy.png +magick -size 64x64 canvas:black -channel blue -fx "1/2" fx_navy.pngHere, we convert a black to a navy blue image:
@@ -32,7 +32,7 @@Or the expression can be complex:
-magick rose: \ +magick rose: \ -fx "(1.0/(1.0+exp(10.0*(0.5-u)))-0.006693)*1.0092503" \ rose-sigmoidal.png@@ -47,7 +47,7 @@The expression can include variable assignments. Assignments, in most cases, reduce the complexity of an expression and permit some operations that might not be possible any other way. For example, lets create a radial gradient:
-magick -size 70x70 canvas: \ +magick -size 70x70 canvas: \ -fx "Xi=i-w/2; Yj=j-h/2; 1.2*(0.5-hypot(Xi,Yj)/70.0)+0.5" \ radial-gradient.png@@ -60,7 +60,7 @@This FX expression adds random noise to an image:
-magick photo.jpg -fx 'iso=32; rone=rand(); rtwo=rand(); \ +magick photo.jpg -fx 'iso=32; rone=rand(); rtwo=rand(); \ myn=sqrt(-2*ln(rone))*cos(2*Pi*rtwo); myntwo=sqrt(-2*ln(rtwo))* \ cos(2*Pi*rone); pnoise=sqrt(p)*myn*sqrt(iso)* \ channel(4.28,3.86,6.68)/255; max(0,p+pnoise)' noisy.png @@ -68,7 +68,7 @@This FX script utilizes a loop to create a Julia set:
-magick -size 400x400 xc:gray -fx " \ +magick -size 400x400 xc:gray -fx " \ Xi=2.4*i/w-1.2; \ Yj=2.4*j/h-1.2; \ for (pixel=0.0, (hypot(Xi,Yj) < 2.0) && (pixel < 1.0), \ @@ -87,7 +87,7 @@This FX script prints the first 10 prime numbers:
-magick xc:gray -fx " \ +magick xc:gray -fx " \ for (prime=2, prime < 30, composite=0; \ for (nn=2, nn < (prime/2+1), if ((prime % nn) == 0, composite++, ); nn++); \ if (composite <= 0, debug(prime), ); prime++)" null:@@ -189,7 +189,7 @@- image attributes:
- s.depth, s.kurtosis, s.maxima, s.mean, s.minima, s.resolution.x, s.resolution.y, s.skewness, s.standard_deviation
- user settings:
-- define Fx symbols as user settings, e.g.
magick ... -set option:wd1 "%[fx:w/2]" -resize "%[fx:wd1-5]" ...- +
- define Fx symbols as user settings, e.g.
magick ... -set option:wd1 "%[fx:w/2]" -resize "%[fx:wd1-5]" ...The FX Expression
@@ -309,14 +309,14 @@As an example, we form an image by averaging the first image and third images (the second (index 1) image is ignored and just junked):
-magick image1.jpg image2.jpg image3.jpg -fx "(u+u[2])/2" image.jpg +magick image1.jpg image2.jpg image3.jpg -fx "(u+u[2])/2" image.jpgBy default, the image to which p, r, g, b, a, etc., are applied is the current image s in the image list. This is equivalent to u except when used in an escape sequence %[fx:...].
It is important to note the special role played by the first image. This is the only image in the image sequence that is modified, other images are used only for their data. As an illustrative example, consider the following, and note that the setting -channel red instructs -fx to modify only the green channel; nothing in the red or blue channels will change. It is instructive to ponder why the result is not symmetric.
-magick logo: -flop logo: -resize "20%" -channel green -fx "(u+v)/2" image.jpg +magick logo: -flop logo: -resize "20%" -channel green -fx "(u+v)/2" image.jpg@@ -353,7 +353,7 @@
Use the -channel setting to specify the output channel of the result. If no output channel is given, the result is set over all channels except the opacity channel. For example, to replace the red channel of alpha.png with the average of the green channels from the images alpha.png and beta.png, use:
-magick alpha.png beta.png -channel red -fx "(u.g+v.g)/2" gamma.png +magick alpha.png beta.png -channel red -fx "(u.g+v.g)/2" gamma.png@@ -374,13 +374,13 @@Here we use the image indexes to rotate each image differently, and use -set with the image index to set a different pause delay on the first image in the animation:
-magick rose: -duplicate 29 -virtual-pixel Gray -distort SRT '%[fx:360.0*t/n]' \ +magick rose: -duplicate 29 -virtual-pixel Gray -distort SRT '%[fx:360.0*t/n]' \ -set delay '%[fx:t == 0 ? 240 : 10]' -loop 0 rose.gifThis example tests the difference between two images, measured by RMSE. If the difference is greater than 0.1 it returns 1; otherwise it returns 0:
-magick water.png reference.png -metric RMSE -compare -format "%[fx:%[distortion]>0.1]" info:+magick water.png reference.png -metric RMSE -compare -format "%[fx:%[distortion]>0.1]" info:The color-escape %[pixel:] or %[hex:] is evaluated once per image and per color channel in that image (-channel is ignored), The values generated are then converted into a color string (a named color or hex color value). The symbols i and j are set to zero, and s and t refer to each successively current image and index.
diff --git a/include/gradient.php b/include/gradient.php index a2282352..e7c5b115 100644 --- a/include/gradient.php +++ b/include/gradient.php @@ -21,7 +21,7 @@Here is an example linear (as opposed to radial) gradient:
-magick -size 256x256 gradient: linear_gradient.png +magick -size 256x256 gradient: linear_gradient.png magick -size 256x256 gradient:white-black linear_gradient.png@@ -29,17 +29,17 @@If you want a radial gradient, try:
-magick -size 256x256 radial-gradient: radial_gradient.png +magick -size 256x256 radial-gradient: radial_gradient.png magick -size 256x256 radial-gradient:white-black radial_gradient.png
If you want non-linear grayscale gradients, then add -colorspace RGB -colorspace gray before saving the output. For example:
-
magick -size 256x256 gradient: linear_gradient.png +magick -size 256x256 gradient: linear_gradient.png magick -size 256x256 gradient:white-black -colorspace RGB -colorspace gray linear_linear_gradient.png-magick -size 256x256 radial-gradient: radial_gradient.png +magick -size 256x256 radial-gradient: radial_gradient.png magick -size 256x256 radial-gradient:white-black -colorspace RGB -colorspace gray linea_radial_gradient.pngGradients are affected by these defines:
@@ -114,17 +114,17 @@The default linear gradient may also be generated in any of the following ways (or by reversing the direction and swapping fromColor and toColor):
-magick -size 256x128 -define gradient:direction=north gradient:black-white linear_gradient_default.png +magick -size 256x128 -define gradient:direction=north gradient:black-white linear_gradient_default.png magick -size 256x128 -define gradient:angle=0 gradient:black-white linear_gradient_default.png
The equivalent of
-magick -size 128x256 gradient: -rotate 90 linear_gradient_east.png+magick -size 128x256 gradient: -rotate 90 linear_gradient_east.pngcan be generate by either of the following (or by reversing the direction and swapping fromColor and toColor):
-magick -size 256x128 -define gradient:direction=east gradient:black-white linear_gradient_east.png +magick -size 256x128 -define gradient:direction=east gradient:black-white linear_gradient_east.png magick -size 256x128 -define gradient:angle=90 gradient:black-white linear_gradient_east.png@@ -133,23 +133,23 @@
Examples of radial gradients going from black in the center to white at the boundary for the cases of "maximum/circle/default", "minimum", "diagonal", "ellipse" and 45 degree rotated ellipse, respectively, follow below.
-magick -size 256x128 radial-gradient:black-white radial_gradient_maximum.png +magick -size 256x128 radial-gradient:black-white radial_gradient_maximum.png magick -size 256x128 -define gradient:radii=128,128 radial-gradient:black-white radial_gradient_maximum.png-
magick -size 256x128 -define gradient:extent=minimum radial-gradient:black-white radial_gradient_minimum.png +magick -size 256x128 -define gradient:extent=minimum radial-gradient:black-white radial_gradient_minimum.png magick -size 256x128 -define gradient:radii=64,64 radial-gradient:black-white radial_gradient_minimum.png-
magick -size 256x128 -define gradient:extent=diagonal radial-gradient:black-white radial_gradient_diagonal.png+magick -size 256x128 -define gradient:extent=diagonal radial-gradient:black-white radial_gradient_diagonal.png-
magick -size 256x128 -define gradient:extent=ellipse radial-gradient:black-white radial_gradient_ellipse.png +magick -size 256x128 -define gradient:extent=ellipse radial-gradient:black-white radial_gradient_ellipse.png magick -size 256x128 -define gradient:radii=128,64 radial-gradient:black-white radial_gradient_ellipse.png-
magick -size 256x256 -define gradient:radii=128,64 -define gradient:angle=45 radial-gradient:black-white radial_gradient_ellipse_angle45.png+magick -size 256x256 -define gradient:radii=128,64 -define gradient:angle=45 radial-gradient:black-white radial_gradient_ellipse_angle45.pngdiff --git a/include/high-dynamic-range.php b/include/high-dynamic-range.php index 35c22883..0c0f13c1 100644 --- a/include/high-dynamic-range.php +++ b/include/high-dynamic-range.php @@ -26,7 +26,7 @@
To verify HDRI is properly configured, look for "HDRI" as a feature:
-magick identify -version +magick identify -version Features: HDRITo display the convex hull and minimum bounding box attributes of the image, use:
-magick identify -define identify:convex-hull=true image.png+magick identify -define identify:convex-hull=true image.pngHere is a special define that outputs the location of the minimum or maximum pixel of the image:
-magick identify -precision 5 -define identify:locate=maximum -define identify:limit=3 image.png+magick identify -precision 5 -define identify:locate=maximum -define identify:limit=3 image.pngYou can find additional examples of using magick identify in Examples of ImageMagick Usage.
diff --git a/include/import.php b/include/import.php index 3fa73d2c..699f10b3 100644 --- a/include/import.php +++ b/include/import.php @@ -1,4 +1,5 @@+Screenshot Utility
Example Usage • Option Summary
@@ -8,11 +9,11 @@We list a few examples of the import command here to illustrate its usefulness and ease of use. To get started, lets import an image of an X11 window in the JPEG format:
-magick import rose.jpg+magick import rose.jpgTo capture the entire X server screen in the Postscript image format:
-magick import -window root screen.ps+magick import -window root screen.psYou can find additional examples of using import in Graphics from the Command Line. Further discussion is available in More Graphics from the Command Line and Examples of ImageMagick Usage.
diff --git a/include/install-source.php b/include/install-source.php index c658601a..32c7e954 100644 --- a/include/install-source.php +++ b/include/install-source.php @@ -4,7 +4,7 @@Chances are, ImageMagick is already installed on your computer if you are using some flavor of Linux, and its likely not installed if you are using some form of Windows. In either case, you can type the following to find out:
-magick identify -version +magick identify -versionIf the identify program executes and identifies itself as ImageMagick, you may not need to install ImageMagick from source unless you want to add support for additional image formats or upgrade to a newer version. You also have the option of installing a pre-compiled binary release. However, if you still want to install from source, choose a platform, Linux or Windows. Before installing from source, you may want to review recent changes to the ImageMagick distribution.
diff --git a/include/jp2.php b/include/jp2.php index 92cc7144..42df276a 100644 --- a/include/jp2.php +++ b/include/jp2.php @@ -11,31 +11,31 @@Use this command to convert a JPEG-2000 image to the PNG image format:
-magick wizard.jp2 wizard.png+magick wizard.jp2 wizard.pngLet's convert a JPEG image to a lossless JPEG-2000 image:
-magick wizard.jpg -quality 0 wizard.jp2+magick wizard.jpg -quality 0 wizard.jp2Here we extract an area from the image:
-magick 'wizard.jp2[640x480+0+0]' wizard.png+magick 'wizard.jp2[640x480+0+0]' wizard.pngExtract a particular tile from the image:
-magick 'wizard.jp2[2]' wizard.png+magick 'wizard.jp2[2]' wizard.pngSpecify a subsampling factor:
-magick wizard.png -colorspace YUV -sampling-factor 2,2 wizard.jp2+magick wizard.png -colorspace YUV -sampling-factor 2,2 wizard.jp2Save a tiled JPEG-2000 image:
-magick wizard.png 'wizard.png[512x512]'+magick wizard.png 'wizard.png[512x512]'Write a digital Cinema 4K profile compliant codestream:
-magick wizard.png -resize 4096x2160! -depth 12 wizard.jp2+magick wizard.png -resize 4096x2160! -depth 12 wizard.jp2Here is a complete list of JPEG-2000 decoding options:
diff --git a/include/magick-vector-graphics.php b/include/magick-vector-graphics.php index 867652a5..fce7a415 100644 --- a/include/magick-vector-graphics.php +++ b/include/magick-vector-graphics.php @@ -5,7 +5,7 @@This specification defines the features and syntax for Magick Vector Graphics (MVG), a modularized language for describing two-dimensional vector and mixed vector/raster graphics in ImageMagick. You can use the language to draw from the command line, from an MVG file, from an SVG -- Scalable Vector Graphics file or from one of the ImageMagick program interfaces. Use this command, for example, to render an arc:
-magick -size 100x60 canvas:skyblue -fill white -stroke black \ +magick -size 100x60 canvas:skyblue -fill white -stroke black \ -draw "path 'M 30,40 A 30,20 20 0,0 70,20 A 30,20 20 1,0 30,40 Z '" \ arc.png@@ -172,7 +172,7 @@to render a pie chart with this command:
-magick mvg:piechart.mvg piechart.png +magick mvg:piechart.mvg piechart.pngwhich produces this rendering:
@@ -183,7 +183,7 @@However, in general, MVG is sufficiently difficult to work with that you probably want to use a program to generate your graphics in the SVG format. ImageMagick automagically converts SVG to MVG and renders your image, for example, we render piechart.svg with this command:
-magick mvg:piechart.svg piechart.jpg +magick mvg:piechart.svg piechart.jpgdiff --git a/include/magick.php b/include/magick.php index 94e2abb4..410e7a94 100644 --- a/include/magick.php +++ b/include/magick.php @@ -4,11 +4,11 @@We list a few examples of the magick command here to illustrate its usefulness and ease of use. To get started, lets convert an image in the JPEG format to PNG:
-magick rose.jpg rose.png+magick rose.jpg rose.pngNext, we reduce the image size before it is written to the PNG format:
-magick rose.jpg -resize 50% rose.png+magick rose.jpg -resize 50% rose.png@@ -22,7 +22,7 @@
You can combine multiple image-processing operations to produce complex results:
-magick -size 320x85 canvas:none -font Bookman-DemiItalic -pointsize 72 \ +magick -size 320x85 canvas:none -font Bookman-DemiItalic -pointsize 72 \ -draw "text 25,60 \'Magick\'" -channel RGBA -blur 0x6 -fill darkred -stroke magenta \ -draw "text 20,55 \'Magick\'" fuzzy-magick.png@@ -32,7 +32,7 @@or here we resize an image with improved quality:
-magick input.png -colorspace RGB +sigmoidal-contrast 11.6933 \ +magick input.png -colorspace RGB +sigmoidal-contrast 11.6933 \ -define filter:filter=Sinc -define filter:window=Jinc -define filter:lobes=3 \ -resize 400% -sigmoidal-contrast 11.6933 -colorspace sRGB output.png');diff --git a/include/mogrify.php b/include/mogrify.php index 1a1f6b31..4012b809 100644 --- a/include/mogrify.php +++ b/include/mogrify.php @@ -9,7 +9,7 @@We list a few examples of the mogrify command here to illustrate its usefulness and ease of use. To get started, let's reduce the size of our rose:
-magick mogrify -resize 50% rose.jpg+magick mogrify -resize 50% rose.jpg@@ -23,11 +23,11 @@
You can resize all your JPEG images in a folder to a maximum dimension of 256x256 with this command:
-magick mogrify -resize 256x256 *.jpg+magick mogrify -resize 256x256 *.jpgFinally, we convert all our PNG images in a folder to the JPEG format:
-magick mogrify -format jpg *.png+magick mogrify -format jpg *.pngHere image files 1.png, 2.png, etc., are left untouched and files 1.jpg, 2.jpg, etc., are created. They are copies of their respective PNG images except are stored in the JPEG image format.
diff --git a/include/montage.php b/include/montage.php index 3dfe1bdf..97bf978b 100644 --- a/include/montage.php +++ b/include/montage.php @@ -8,7 +8,7 @@We list a few examples of the montage command here to illustrate its usefulness and ease of use. To get started, let's montage two images into a single composite:
-magick montage -background '#336699' -geometry +4+4 rose.jpg red-ball.png montage.jpg+magick montage -background '#336699' -geometry +4+4 rose.jpg red-ball.png montage.jpg@@ -25,7 +25,7 @@
Ok, let's add some decorations:
-magick montage -label %f -frame 5 -background '#336699' -geometry +4+4 rose.jpg red-ball.png frame.jpg+magick montage -label %f -frame 5 -background '#336699' -geometry +4+4 rose.jpg red-ball.png frame.jpg@@ -45,7 +45,7 @@
Ashlar Pseudo-image Format
Use the Ashlar pseudo-image format to lay out an image sequence in continuous irregular courses. By default, a reasonable canvas size and border width is determined relative to the image collection you provide. You can explicitedly set the canvas size and border width by appending to the filename, e.g. ashlar:canvas.png[1024x768+4+4]. By default, alignment is along the left edge. Use -define ashlar:best-fit=true to align on both the left and right edges. You can label the image tiles with, for example, -label %f. Here is an example command: -
magick '*.png' -resize 320x320 -label %f ashlar:ashlar.png+magick '*.png' -resize 320x320 -label %f ashlar:ashlar.pngThis is designed to quickly view a collection of images. To have more control over the layout of your image tiles, use the montage command instead.
diff --git a/include/motion-picture.php b/include/motion-picture.php index 3d99a50b..0e075d31 100644 --- a/include/motion-picture.php +++ b/include/motion-picture.php @@ -88,17 +88,17 @@To determine which properties are associated with your DPX image, use this command for example:
-magick identify -verbose bluebells.dpx +magick identify -verbose bluebells.dpxTo identify a particular property, try this:
-magick identify -format "%[dpx:television.time.code]" bluebells.dpx +magick identify -format "%[dpx:television.time.code]" bluebells.dpxFinally, to set a property:
-magick bluebells.dpx -define dpx:television.time.code=10:00:02:15 bluebells-001.dpx +magick bluebells.dpx -define dpx:television.time.code=10:00:02:15 bluebells-001.dpxDPX Settings
diff --git a/include/opencl.php b/include/opencl.php index 368b7473..63031db1 100644 --- a/include/opencl.php +++ b/include/opencl.php @@ -34,7 +34,7 @@ functionOpenCL Operation Notes
When some of the OpenCL accelerated operators are invoked for the first time and all the conditions above are met, ImageMagick conducts a series of tests to configure the OpenCL environment according to the system hardware; therefore, it is normal to experience a higher latency the first time you use an accelerated option. The OpenCL kernels are embedded inside ImageMagick in source format. During the initial setup, ImageMagick discovers all the available OpenCL devices and compiles the kernels for each of these targets. ImageMagick also runs several performance tests internally to determine the preferred device to use. The compiled kernel code and the performance test results are stored into the cache directory so that the data can be reused by subsequent invocations of the OpenCL path. By default, the OpenCL cached data is stored in $HOME/.cache/ImageMagick on Linux and on MacOSX or in %LOCALAPPDATA%\ImageMagick on Windows. To run these tests for the first time, use the command below:
-MAGICK_OCL_DEVICE=true magick sample.jpg -blur 0x5 null:+magick_OCL_DEVICE=true magick sample.jpg -blur 0x5 null:On Windows the MAGICK_OCL_DEVICE=true part should be removed and the command set MAGICK_OCL_DEVICE=true should be executed before executing the command above to enable OpenCL operations.
To change the cache directory, set the MAGICK_OPENCL_CACHE_DIR environment variable. ImageMagick is able to detect hardware changes, driver updates, and new kernel sources and re-run the setup and the calibration test. You can also force ImageMagick to re-run the process by removing the content from the cache directory.
In addition to the environment variables mentioned above, ImageMagick provides a set of APIs that allow developers to gain more fine-grained control of the OpenCL acceleration. For example, use the InitializeOpenCL() function to initialize the OpenCL environment:
diff --git a/include/porting.php b/include/porting.php index 9d25aaae..a3061c3f 100644 --- a/include/porting.php +++ b/include/porting.php @@ -219,7 +219,7 @@ Rec709Luma Rec709LuminanceFor example,
-magick myImage.png -intensity Rec709Luminance -colorspace gray myImage.jpg+magick myImage.png -intensity Rec709Luminance -colorspace gray myImage.jpgGrayscale
Previously, grayscale images were Rec601Luminance and consumed 4 channels: red, green, blue, and alpha. With version 7, grayscale consumes only 1 channel requiring far less resources as a result.
@@ -229,7 +229,7 @@In this example, we compute the distortion of a masked reconstructed image:
compare -metric rmse -read-mask hat_mask.png hat.png wizard.png difference.pngHere we protect certain pixels from change:
-magick rose: -write-mask rose_bg_mask.png -modulate 110,100,33.3 +write-mask rose_blue.png+magick rose: -write-mask rose_bg_mask.png -modulate 110,100,33.3 +write-mask rose_blue.pngA mask associated with an image persists until it is modified or removed. This may produce unexpected results for complex command-lines. Here we only want to clip when applying the alpha option, not the resize:
@@ -274,7 +274,7 @@Deprecated Features Removed
All deprecated features from ImageMagick version 6 are removed in version 7. These include the Magick-config and Wand-config configuration utilities. Instead use:
-MagickCore-config +magickCore-config MagickWand-configThe FilterImage() method has been removed. Use ConvolveImage() instead.
@@ -353,10 +353,10 @@Behavioral Changes
Image settings are applied to each image on the command line. To associate a setting with a particular image, use parenthesis to remove ambiguity. In this example we assign a unique page offset to each image:
-magick \( -page +10+20 first.png \) \( -page +100+200 second.png \) ...+magick \( -page +10+20 first.png \) \( -page +100+200 second.png \) ...By default, image operations such as convolution blends alpha with each channel. To convolve each channel independently, deactivate the alpha channel as follows:
-magick ... -alpha discrete -blur 0x1 ...+magick ... -alpha discrete -blur 0x1 ...To remove the alpha values from your image, use -alpha off. If you want to instead persist the alpha channel but not blend the alpha pixels for certain image processing operations, use -alpha deactivate instead.
Some options have changed in ImageMagick version 7. These include:
@@ -421,9 +421,9 @@
A channel without an operation symbol implies separate (i.e, semicolon).
Here we take an sRGB image and a grayscale image and inject the grayscale image into the alpha channel:
-magick wizard.png mask.pgm -channel-fx '| gray=>alpha' wizard-alpha.png+magick wizard.png mask.pgm -channel-fx '| gray=>alpha' wizard-alpha.pngUse a similar command to define a read mask:
-magick wizard.png mask.pgm -channel-fx '| gray=>read-mask' wizard-mask.png+magick wizard.png mask.pgm -channel-fx '| gray=>read-mask' wizard-mask.pngAdd -debug pixel prior to the -channel-fx option to track the channel morphology.
diff --git a/include/stream.php b/include/stream.php index 1a36dce4..79c4ef92 100644 --- a/include/stream.php +++ b/include/stream.php @@ -8,18 +8,18 @@We list a few examples of the stream command here to illustrate its usefulness and ease of use. To get started, lets stream the red, green, blue components of a 640x480 JPEG image to disk as unsigned characters:
-magick stream -map rgb -storage-type char image.jpg pixels.dat +magick stream -map rgb -storage-type char image.jpg pixels.dat magick display -depth 8 -size 640x480 rgb:pixels.datHere we extract a 100x100 region from a TIFF image in the grayscale format as doubles:
-magick stream -map i -storage-type double -extract 100x100+30+40 image.tif gray.raw +magick stream -map i -storage-type double -extract 100x100+30+40 image.tif gray.rawYou can also associate the region to extract with the image filename:
-magick stream -map i -storage-type double 'image.tif[100x100+30+40]' gray.raw +magick stream -map i -storage-type double 'image.tif[100x100+30+40]' gray.rawStreaming requires that the image coder read the image pixels in row order. Not all formats adhere to this requirement. Verify a particular image format first, before you utilize streaming in your workflow.
diff --git a/include/webp.php b/include/webp.php index 29f10782..cf6e54b7 100644 --- a/include/webp.php +++ b/include/webp.php @@ -8,7 +8,7 @@Use this command:
-magick wizard.png -quality 50 -define webp:lossless=true wizard.webp+magick wizard.png -quality 50 -define webp:lossless=true wizard.webpHere is a complete list of WebP encoding options:
diff --git a/script/session.php b/script/session.php index 4855c2d9..e5fb5d55 100644 --- a/script/session.php +++ b/script/session.php @@ -59,18 +59,18 @@ ($_SERVER['SERVER_NAME'] == 'www.imagemagick.net') || ($_SERVER['SERVER_NAME'] == 'www.imagemagick.org')) { - header("Location: https://imagemagick.org/index.php"); + header("Location: http://imagemagick.org/index.php"); exit; } - $use_sts = true; - if ($_SERVER["SERVER_ADDR"] == "10.144.245.30") { + $use_sts = false; + if ($_SERVER["SERVER_ADDR"] == "192.168.137.1") { $use_sts = false; } if ($use_sts && isset($_SERVER['HTTPS'])) { header('Strict-Transport-Security: max-age=63072000; includeSubDomains; preload'); } elseif ($use_sts && !isset($_SERVER['HTTPS'])) { header('Status-Code: 301'); - header('Location: https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); + header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); } require_once($_SESSION['AbsolutePath'] . '/../class/Mail.php'); require_once($_SESSION['AbsolutePath'] . '/../class/MetaContent.php'); diff --git a/source/cli-translate.js b/source/cli-translate.js new file mode 100644 index 00000000..72e17711 --- /dev/null +++ b/source/cli-translate.js @@ -0,0 +1,128 @@ +var imagemagick_cli_lists = null; + +function addSelectOptions(node) +{ + var selectCliLanguageNode = document.createElement("select"); + selectCliLanguageNode.className += "btn text-dark bg-light mx-4"; + selectCliLanguageNode.style.fontSize=".75rem"; + selectCliLanguageNode.style.float="right"; + selectCliLanguageNode.style.clear="both"; + selectCliLanguageNode.style.position="relative"; + selectCliLanguageNode.style.top="-18px"; + selectCliLanguageNode.style.height="22px"; + selectCliLanguageNode.style.padding="0px"; + selectCliLanguageNode.onchange = function(){setCliChanged(this)}; + selectCliLanguageNode.title = "Change Operating System Syntax"; + var selectCliLanguageOptions = ["Linux","Windows","Bat File"]; + + for(let option of selectCliLanguageOptions){ + var optionNode = document.createElement("option"); + optionNode.text=option; + selectCliLanguageNode.appendChild(optionNode); + } + node.after(selectCliLanguageNode); + return selectCliLanguageNode; +} + +const imagemagick_linux_to_windows_replacements = new Map([ + [/\\\s*\n/gm, "^\n"], //replace newlines with ^\n + [/\s?\\(\(|\))\s?/gm, " $1 "], // unesecape parens, add space on either side to ensure compatibility "word\)" is valid in linux in windows "word)" is not. + [/\\!/gm,"!"], // unescape exclamation point. + [/'/gm, "\""], //single quote to double quote, breaks on nested quotes. + [/\&|\||\<|\>/gm, "\\$&"], //Escape &,|,<,> - note: appears unused. +]); + +const imagemagick_linux_to_windows_bat_replacements = new Map([ + [/%/gm, "%%"], //Double up % signs. Needed for bat files, but not for CMD. + [/^\s*#/gm, "::"], //Replace UNIX comment # with two colons. No support for inline comments. +]) + +function translateLinuxToWindows(node) { + imagemagick_linux_to_windows_replacements.forEach(function(value,key){ + node.innerHTML = node.innerHTML.replaceAll(key,value); + }); +} + +function translateWindowsToBatch(node) { + imagemagick_linux_to_windows_bat_replacements.forEach(function(value,key){ + node.innerHTML = node.innerHTML.replaceAll(key,value); + }); +} + +function addLinuxWindowsCLIToggle(node) { + var copyNode = node.cloneNode(true); + copyNode.classList.add("cli-windows"); + copyNode.style.display = "none"; + translateLinuxToWindows(copyNode); + var batchNode = copyNode.cloneNode(true); + batchNode.classList.add("cli-batch"); + batchNode.style.display = "none"; + translateWindowsToBatch(batchNode); + if(batchNode.innerHTML == node.innerHTML) // No change, ignore. + { + copyNode.remove(); + return []; + } + + node.classList.add("cli-linux"); + node.after(copyNode); + copyNode.after(batchNode); + return [copyNode,batchNode]; +} + +function addCliTranslations() { + var pres = document.querySelectorAll('pre.cli'); + var cliWindowsList = []; + var cliBatchList = []; + var cliLinuxList = []; + var cliSelectList = []; + for (let pre of pres) { + var samp = pre.childNodes[0]; + if(samp.tagName.toLowerCase() == "samp") { + var translated = addLinuxWindowsCLIToggle(samp); + if(translated.length == 2) + { + cliLinuxList.push(samp); + cliWindowsList.push(translated[0]); + cliBatchList.push(translated[1]); + cliSelectList.push(addSelectOptions(pre)) + } + } + } + + return {"windows":cliWindowsList, "linux":cliLinuxList, "batch": cliBatchList, "select":cliSelectList}; +} + +function setCliLanguage(language){ + if( imagemagick_cli_lists == null) { + imagemagick_cli_lists = addCliTranslations(); + } + + var display_windows = language == "Windows" ? "inherit" : "none"; + var display_linux = language == "Linux" ? "inherit" : "none"; + var display_batch = language == "Bat File" ? "inherit" : "none"; + for( let node of imagemagick_cli_lists["windows"]) + { + node.style.display = display_windows; + } + for( let node of imagemagick_cli_lists["linux"]) + { + node.style.display = display_linux; + } + for( let node of imagemagick_cli_lists["batch"]) + { + node.style.display = display_batch; + } + for( let node of imagemagick_cli_lists["select"] ) + { + node.value = language; + } +} + +function setCliChanged(selectNode){ + setCliLanguage(selectNode.value); +} + +if( imagemagick_cli_lists == null) { + imagemagick_cli_lists = addCliTranslations(); +} \ No newline at end of file From 29d8bc90ac71619406e3398f83541bc3c1d270e1 Mon Sep 17 00:00:00 2001 From: Ryan DowlingSokaDate: Tue, 1 Nov 2022 12:59:23 -0700 Subject: [PATCH 02/12] fix typo in early magick command. update from -matte to -alpha Note, the resultant images look different than what I get when I run this command. --- include/command-line-processing.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/command-line-processing.php b/include/command-line-processing.php index 1e75a076..366b8d3f 100644 --- a/include/command-line-processing.php +++ b/include/command-line-processing.php @@ -8,10 +8,10 @@ Or it can be complex with a plethora of options, as in the following:
-magick label.gif +matte \ +magick label.gif -alpha Set \ \( +clone -shade 110x90 -normalize -negate +clone -compose Plus -composite \) \ - \( -clone 0 -shade 110x50 -normalize -channel BG -fx 0 +channel -matte \) \ - -delete 0 +swap -compose Multiply -composite button.gif");+ \( -clone 0 -shade 110x50 -normalize -channel BG -fx 0 +channel -alpha Off \) \ + -delete 0 +swap -compose Multiply -composite button.gifThis example command is long enough that the command must be written across several lines, so we formatted it for clarity by inserting backslashes (\). The backslash is the Linux line-continuation character. In the Windows shell, use a carat character (^) for line-continuation. We use the Linux style on these web pages, as above. Sometimes, however, the lines are wrapped by your browser if the browser window is small enough, but the command-lines, shown in white, are still intended to be typed as one line. Line continuation characters need not be entered. The parentheses that are escaped above using the backslash are not escaped in Windows. There are some other differences between Windows and Linux (involving quotation marks, for instance), but we'll discuss some of those issues later, as they arise.
From e3aca7136d4d8402535ffdcb571700c2ae613cbc Mon Sep 17 00:00:00 2001 From: Ryan DowlingSokaDate: Tue, 1 Nov 2022 13:17:48 -0700 Subject: [PATCH 03/12] Add explanation line about the auto translation button --- include/command-line-processing.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/command-line-processing.php b/include/command-line-processing.php index 366b8d3f..5d4d63eb 100644 --- a/include/command-line-processing.php +++ b/include/command-line-processing.php @@ -15,6 +15,8 @@ This example command is long enough that the command must be written across several lines, so we formatted it for clarity by inserting backslashes (\). The backslash is the Linux line-continuation character. In the Windows shell, use a carat character (^) for line-continuation. We use the Linux style on these web pages, as above. Sometimes, however, the lines are wrapped by your browser if the browser window is small enough, but the command-lines, shown in white, are still intended to be typed as one line. Line continuation characters need not be entered. The parentheses that are escaped above using the backslash are not escaped in Windows. There are some other differences between Windows and Linux (involving quotation marks, for instance), but we'll discuss some of those issues later, as they arise.
+For most command line examples on this site, if there is an equivalent translation to run on windows there will be a dropdown in the bottom right, letting you switch which operating system you are previewing the command for.
+Without knowing much about the ImageMagick command-line, you can probably surmise that the first command above converts an image in the JPEG format to one in the PNG format. However, very few may realize the second, more complex command, gives a flat two-dimensional label a three-dimensional look with rich textures and simulated depth:
From 2fc5efa4f6f699314eb73ee657f69d369caa9416 Mon Sep 17 00:00:00 2001 From: Ryan DowlingSoka
Date: Tue, 1 Nov 2022 13:28:39 -0700 Subject: [PATCH 04/12] revert local development change --- script/session.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/script/session.php b/script/session.php index e5fb5d55..4855c2d9 100644 --- a/script/session.php +++ b/script/session.php @@ -59,18 +59,18 @@ ($_SERVER['SERVER_NAME'] == 'www.imagemagick.net') || ($_SERVER['SERVER_NAME'] == 'www.imagemagick.org')) { - header("Location: http://imagemagick.org/index.php"); + header("Location: https://imagemagick.org/index.php"); exit; } - $use_sts = false; - if ($_SERVER["SERVER_ADDR"] == "192.168.137.1") { + $use_sts = true; + if ($_SERVER["SERVER_ADDR"] == "10.144.245.30") { $use_sts = false; } if ($use_sts && isset($_SERVER['HTTPS'])) { header('Strict-Transport-Security: max-age=63072000; includeSubDomains; preload'); } elseif ($use_sts && !isset($_SERVER['HTTPS'])) { header('Status-Code: 301'); - header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); + header('Location: https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); } require_once($_SESSION['AbsolutePath'] . '/../class/Mail.php'); require_once($_SESSION['AbsolutePath'] . '/../class/MetaContent.php'); From 83b23d62eaf73c91d62aa3444a58bcceb0e24430 Mon Sep 17 00:00:00 2001 From: Ryan DowlingSoka Date: Fri, 27 Jan 2023 10:04:43 -0800 Subject: [PATCH 05/12] move cli-translate.js to assets folder. --- {source => assets}/cli-translate.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {source => assets}/cli-translate.js (100%) diff --git a/source/cli-translate.js b/assets/cli-translate.js similarity index 100% rename from source/cli-translate.js rename to assets/cli-translate.js From c6d44199f1c03f64e32910ad4a5f1ea5740d82de Mon Sep 17 00:00:00 2001 From: Ryan DowlingSoka Date: Fri, 27 Jan 2023 10:08:16 -0800 Subject: [PATCH 06/12] .bat to batch, cli-select-button class. --- assets/cli-translate.js | 11 ++--------- assets/cli-translate.min.js | 2 +- assets/magick-template.css | 10 ++++++++++ 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/assets/cli-translate.js b/assets/cli-translate.js index 72e17711..da7bd5be 100644 --- a/assets/cli-translate.js +++ b/assets/cli-translate.js @@ -3,17 +3,10 @@ var imagemagick_cli_lists = null; function addSelectOptions(node) { var selectCliLanguageNode = document.createElement("select"); - selectCliLanguageNode.className += "btn text-dark bg-light mx-4"; - selectCliLanguageNode.style.fontSize=".75rem"; - selectCliLanguageNode.style.float="right"; - selectCliLanguageNode.style.clear="both"; - selectCliLanguageNode.style.position="relative"; - selectCliLanguageNode.style.top="-18px"; - selectCliLanguageNode.style.height="22px"; - selectCliLanguageNode.style.padding="0px"; + selectCliLanguageNode.className += "btn text-dark bg-light mx-4 cli-select-button"; selectCliLanguageNode.onchange = function(){setCliChanged(this)}; selectCliLanguageNode.title = "Change Operating System Syntax"; - var selectCliLanguageOptions = ["Linux","Windows","Bat File"]; + var selectCliLanguageOptions = ["Linux","Windows","Batch File"]; for(let option of selectCliLanguageOptions){ var optionNode = document.createElement("option"); diff --git a/assets/cli-translate.min.js b/assets/cli-translate.min.js index b2a7bf3b..6e2fa9a9 100644 --- a/assets/cli-translate.min.js +++ b/assets/cli-translate.min.js @@ -1 +1 @@ -function addSelectOptions(e){var i=document.createElement("select");i.className+="btn text-dark bg-light mx-4",i.style.fontSize=".75rem",i.style.float="right",i.style.clear="both",i.style.position="relative",i.style.top="-18px",i.style.height="22px",i.style.padding="0px",i.onchange=function(){setCliChanged(this)},i.title="Change Operating System Syntax";var n=["Linux","Windows","Bat File"];for(let e of n){var t=document.createElement("option");t.text=e,i.appendChild(t)}return e.after(i),i}function translateLinuxToWindows(e){imagemagick_linux_to_windows_replacements.forEach(function(i,n){e.innerHTML=e.innerHTML.replaceAll(n,i)})}function translateWindowsToBatch(e){imagemagick_linux_to_windows_bat_replacements.forEach(function(i,n){e.innerHTML=e.innerHTML.replaceAll(n,i)})}function addLinuxWindowsCLIToggle(e){var i=e.cloneNode(!0);i.classList.add("cli-windows"),i.style.display="none",translateLinuxToWindows(i);var n=i.cloneNode(!0);return n.classList.add("cli-batch"),n.style.display="none",translateWindowsToBatch(n),n.innerHTML==e.innerHTML?(i.remove(),[]):(e.classList.add("cli-linux"),e.after(i),i.after(n),[i,n])}function addCliTranslations(){var e=document.querySelectorAll("pre.cli"),i=[],n=[],t=[],a=[];for(let o of e){var l=o.childNodes[0];if("samp"==l.tagName.toLowerCase()){var s=addLinuxWindowsCLIToggle(l);2==s.length&&(t.push(l),i.push(s[0]),n.push(s[1]),a.push(addSelectOptions(o)))}}return{windows:i,linux:t,batch:n,select:a}}function setCliLanguage(e){null==imagemagick_cli_lists&&(imagemagick_cli_lists=addCliTranslations());var i="Windows"==e?"inherit":"none",n="Linux"==e?"inherit":"none",t="Bat File"==e?"inherit":"none";for(let e of imagemagick_cli_lists.windows)e.style.display=i;for(let e of imagemagick_cli_lists.linux)e.style.display=n;for(let e of imagemagick_cli_lists.batch)e.style.display=t;for(let i of imagemagick_cli_lists.select)i.value=e}function setCliChanged(e){setCliLanguage(e.value)}var imagemagick_cli_lists=null;const imagemagick_linux_to_windows_replacements=new Map([[/\\\s*\n/gm,"^\n"],[/\s?\\(\(|\))\s?/gm," $1 "],[/\\!/gm,"!"],[/'/gm,'"'],[/\&|\||\<|\>/gm,"\\$&"]]),imagemagick_linux_to_windows_bat_replacements=new Map([[/%/gm,"%%"],[/^\s*#/gm,"::"]]);null==imagemagick_cli_lists&&(imagemagick_cli_lists=addCliTranslations()); \ No newline at end of file +function addSelectOptions(i){var e=document.createElement("select");e.className+="btn text-dark bg-light mx-4 cli-select-button",e.onchange=function(){setCliChanged(this)},e.title="Change Operating System Syntax";var n=["Linux","Windows","Batch File"];for(let i of n){var a=document.createElement("option");a.text=i,e.appendChild(a)}return i.after(e),e}function translateLinuxToWindows(i){imagemagick_linux_to_windows_replacements.forEach(function(e,n){i.innerHTML=i.innerHTML.replaceAll(n,e)})}function translateWindowsToBatch(i){imagemagick_linux_to_windows_bat_replacements.forEach(function(e,n){i.innerHTML=i.innerHTML.replaceAll(n,e)})}function addLinuxWindowsCLIToggle(i){var e=i.cloneNode(!0);e.classList.add("cli-windows"),e.style.display="none",translateLinuxToWindows(e);var n=e.cloneNode(!0);return n.classList.add("cli-batch"),n.style.display="none",translateWindowsToBatch(n),n.innerHTML==i.innerHTML?(e.remove(),[]):(i.classList.add("cli-linux"),i.after(e),e.after(n),[e,n])}function addCliTranslations(){var i=document.querySelectorAll("pre.cli"),e=[],n=[],a=[],t=[];for(let o of i){var l=o.childNodes[0];if("samp"==l.tagName.toLowerCase()){var s=addLinuxWindowsCLIToggle(l);2==s.length&&(a.push(l),e.push(s[0]),n.push(s[1]),t.push(addSelectOptions(o)))}}return{windows:e,linux:a,batch:n,select:t}}function setCliLanguage(i){null==imagemagick_cli_lists&&(imagemagick_cli_lists=addCliTranslations());var e="Windows"==i?"inherit":"none",n="Linux"==i?"inherit":"none",a="Bat File"==i?"inherit":"none";for(let i of imagemagick_cli_lists.windows)i.style.display=e;for(let i of imagemagick_cli_lists.linux)i.style.display=n;for(let i of imagemagick_cli_lists.batch)i.style.display=a;for(let e of imagemagick_cli_lists.select)e.value=i}function setCliChanged(i){setCliLanguage(i.value)}var imagemagick_cli_lists=null;const imagemagick_linux_to_windows_replacements=new Map([[/\\\s*\n/gm,"^\n"],[/\s?\\(\(|\))\s?/gm," $1 "],[/\\!/gm,"!"],[/'/gm,'"'],[/\&|\||\<|\>/gm,"\\$&"]]),imagemagick_linux_to_windows_bat_replacements=new Map([[/%/gm,"%%"],[/^\s*#/gm,"::"]]);null==imagemagick_cli_lists&&(imagemagick_cli_lists=addCliTranslations()); \ No newline at end of file diff --git a/assets/magick-template.css b/assets/magick-template.css index e9988c89..e7a8e35c 100644 --- a/assets/magick-template.css +++ b/assets/magick-template.css @@ -55,3 +55,13 @@ a.anchor { max-height: 340px; overflow-y: scroll; } + +.cli-select-button{ + font-size:.75rem; + float:right; + clear:both; + position:relative; + top:-18px; + height:22px; + padding:0px; +} \ No newline at end of file From 87913faa1ca48351be428bf8a3e7c81ad5e61256 Mon Sep 17 00:00:00 2001 From: Ryan DowlingSoka Date: Fri, 27 Jan 2023 11:09:02 -0800 Subject: [PATCH 07/12] Update to query selector, fix broken Batch files. --- assets/cli-translate.js | 6 +++--- assets/cli-translate.min.js | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/assets/cli-translate.js b/assets/cli-translate.js index da7bd5be..bd04212e 100644 --- a/assets/cli-translate.js +++ b/assets/cli-translate.js @@ -70,8 +70,8 @@ function addCliTranslations() { var cliLinuxList = []; var cliSelectList = []; for (let pre of pres) { - var samp = pre.childNodes[0]; - if(samp.tagName.toLowerCase() == "samp") { + var samp = pre.querySelector("samp"); + if(samp != null) { var translated = addLinuxWindowsCLIToggle(samp); if(translated.length == 2) { @@ -93,7 +93,7 @@ function setCliLanguage(language){ var display_windows = language == "Windows" ? "inherit" : "none"; var display_linux = language == "Linux" ? "inherit" : "none"; - var display_batch = language == "Bat File" ? "inherit" : "none"; + var display_batch = language == "Batch File" ? "inherit" : "none"; for( let node of imagemagick_cli_lists["windows"]) { node.style.display = display_windows; diff --git a/assets/cli-translate.min.js b/assets/cli-translate.min.js index 6e2fa9a9..b35ed0cf 100644 --- a/assets/cli-translate.min.js +++ b/assets/cli-translate.min.js @@ -1 +1 @@ -function addSelectOptions(i){var e=document.createElement("select");e.className+="btn text-dark bg-light mx-4 cli-select-button",e.onchange=function(){setCliChanged(this)},e.title="Change Operating System Syntax";var n=["Linux","Windows","Batch File"];for(let i of n){var a=document.createElement("option");a.text=i,e.appendChild(a)}return i.after(e),e}function translateLinuxToWindows(i){imagemagick_linux_to_windows_replacements.forEach(function(e,n){i.innerHTML=i.innerHTML.replaceAll(n,e)})}function translateWindowsToBatch(i){imagemagick_linux_to_windows_bat_replacements.forEach(function(e,n){i.innerHTML=i.innerHTML.replaceAll(n,e)})}function addLinuxWindowsCLIToggle(i){var e=i.cloneNode(!0);e.classList.add("cli-windows"),e.style.display="none",translateLinuxToWindows(e);var n=e.cloneNode(!0);return n.classList.add("cli-batch"),n.style.display="none",translateWindowsToBatch(n),n.innerHTML==i.innerHTML?(e.remove(),[]):(i.classList.add("cli-linux"),i.after(e),e.after(n),[e,n])}function addCliTranslations(){var i=document.querySelectorAll("pre.cli"),e=[],n=[],a=[],t=[];for(let o of i){var l=o.childNodes[0];if("samp"==l.tagName.toLowerCase()){var s=addLinuxWindowsCLIToggle(l);2==s.length&&(a.push(l),e.push(s[0]),n.push(s[1]),t.push(addSelectOptions(o)))}}return{windows:e,linux:a,batch:n,select:t}}function setCliLanguage(i){null==imagemagick_cli_lists&&(imagemagick_cli_lists=addCliTranslations());var e="Windows"==i?"inherit":"none",n="Linux"==i?"inherit":"none",a="Bat File"==i?"inherit":"none";for(let i of imagemagick_cli_lists.windows)i.style.display=e;for(let i of imagemagick_cli_lists.linux)i.style.display=n;for(let i of imagemagick_cli_lists.batch)i.style.display=a;for(let e of imagemagick_cli_lists.select)e.value=i}function setCliChanged(i){setCliLanguage(i.value)}var imagemagick_cli_lists=null;const imagemagick_linux_to_windows_replacements=new Map([[/\\\s*\n/gm,"^\n"],[/\s?\\(\(|\))\s?/gm," $1 "],[/\\!/gm,"!"],[/'/gm,'"'],[/\&|\||\<|\>/gm,"\\$&"]]),imagemagick_linux_to_windows_bat_replacements=new Map([[/%/gm,"%%"],[/^\s*#/gm,"::"]]);null==imagemagick_cli_lists&&(imagemagick_cli_lists=addCliTranslations()); \ No newline at end of file +function addSelectOptions(i){var e=document.createElement("select");e.className+="btn text-dark bg-light mx-4 cli-select-button",e.onchange=function(){setCliChanged(this)},e.title="Change Operating System Syntax";var n=["Linux","Windows","Batch File"];for(let i of n){var a=document.createElement("option");a.text=i,e.appendChild(a)}return i.after(e),e}function translateLinuxToWindows(i){imagemagick_linux_to_windows_replacements.forEach(function(e,n){i.innerHTML=i.innerHTML.replaceAll(n,e)})}function translateWindowsToBatch(i){imagemagick_linux_to_windows_bat_replacements.forEach(function(e,n){i.innerHTML=i.innerHTML.replaceAll(n,e)})}function addLinuxWindowsCLIToggle(i){var e=i.cloneNode(!0);e.classList.add("cli-windows"),e.style.display="none",translateLinuxToWindows(e);var n=e.cloneNode(!0);return n.classList.add("cli-batch"),n.style.display="none",translateWindowsToBatch(n),n.innerHTML==i.innerHTML?(e.remove(),[]):(i.classList.add("cli-linux"),i.after(e),e.after(n),[e,n])}function addCliTranslations(){var i=document.querySelectorAll("pre.cli"),e=[],n=[],a=[],t=[];for(let o of i){var l=o.querySelector("samp");if(null!=l){var s=addLinuxWindowsCLIToggle(l);2==s.length&&(a.push(l),e.push(s[0]),n.push(s[1]),t.push(addSelectOptions(o)))}}return{windows:e,linux:a,batch:n,select:t}}function setCliLanguage(i){null==imagemagick_cli_lists&&(imagemagick_cli_lists=addCliTranslations());var e="Windows"==i?"inherit":"none",n="Linux"==i?"inherit":"none",a="Batch File"==i?"inherit":"none";for(let i of imagemagick_cli_lists.windows)i.style.display=e;for(let i of imagemagick_cli_lists.linux)i.style.display=n;for(let i of imagemagick_cli_lists.batch)i.style.display=a;for(let e of imagemagick_cli_lists.select)e.value=i}function setCliChanged(i){setCliLanguage(i.value)}var imagemagick_cli_lists=null;const imagemagick_linux_to_windows_replacements=new Map([[/\\\s*\n/gm,"^\n"],[/\s?\\(\(|\))\s?/gm," $1 "],[/\\!/gm,"!"],[/'/gm,'"'],[/\&|\||\<|\>/gm,"\\$&"]]),imagemagick_linux_to_windows_bat_replacements=new Map([[/%/gm,"%%"],[/^\s*#/gm,"::"]]);null==imagemagick_cli_lists&&(imagemagick_cli_lists=addCliTranslations()); \ No newline at end of file From 64f9e7513c0cd5f40a11623e99d92ea85d4d15e4 Mon Sep 17 00:00:00 2001 From: Ryan DowlingSoka Date: Fri, 27 Jan 2023 11:13:26 -0800 Subject: [PATCH 08/12] Magick-js.php remove bootstrap sourcemappingurl. --- assets/bootstrap.bundle.min.js | 3 +-- assets/magick-js.php | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/assets/bootstrap.bundle.min.js b/assets/bootstrap.bundle.min.js index 819659b4..51d9a28b 100644 --- a/assets/bootstrap.bundle.min.js +++ b/assets/bootstrap.bundle.min.js @@ -3,5 +3,4 @@ * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t="transitionend",e=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e},i=t=>{const i=e(t);return i&&document.querySelector(i)?i:null},n=t=>{const i=e(t);return i?document.querySelector(i):null},s=e=>{e.dispatchEvent(new Event(t))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(t):null,a=t=>{if(!o(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},l=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),c=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?c(t.parentNode):null},h=()=>{},d=t=>{t.offsetHeight},u=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,f=[],p=()=>"rtl"===document.documentElement.dir,g=t=>{var e;e=()=>{const e=u();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of f)t()})),f.push(e)):e()},m=t=>{"function"==typeof t&&t()},_=(e,i,n=!0)=>{if(!n)return void m(e);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(i)+5;let r=!1;const a=({target:n})=>{n===i&&(r=!0,i.removeEventListener(t,a),m(e))};i.addEventListener(t,a),setTimeout((()=>{r||s(i)}),o)},b=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},v=/[^.]*(?=\..*)\.|.*/,y=/\..*/,w=/::\d+$/,A={};let E=1;const T={mouseenter:"mouseover",mouseleave:"mouseout"},C=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function O(t,e){return e&&`${e}::${E++}`||t.uidEvent||E++}function x(t){const e=O(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function k(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function L(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=N(t);return C.has(o)||(o=t),[n,s,o]}function D(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=L(e,i,n);if(e in T){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=x(t),c=l[a]||(l[a]={}),h=k(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=O(r,e.replace(v,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return j(s,{delegateTarget:r}),n.oneOff&&P.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return j(n,{delegateTarget:t}),i.oneOff&&P.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function S(t,e,i,n,s){const o=k(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function I(t,e,i,n){const s=e[i]||{};for(const o of Object.keys(s))if(o.includes(n)){const n=s[o];S(t,e,i,n.callable,n.delegationSelector)}}function N(t){return t=t.replace(y,""),T[t]||t}const P={on(t,e,i,n){D(t,e,i,n,!1)},one(t,e,i,n){D(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=L(e,i,n),a=r!==e,l=x(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))I(t,l,i,e.slice(1));for(const i of Object.keys(c)){const n=i.replace(w,"");if(!a||e.includes(n)){const e=c[i];S(t,l,r,e.callable,e.delegationSelector)}}}else{if(!Object.keys(c).length)return;S(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=u();let s=null,o=!0,r=!0,a=!1;e!==N(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());let l=new Event(e,{bubbles:o,cancelable:!0});return l=j(l,i),a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function j(t,e){for(const[i,n]of Object.entries(e||{}))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}const M=new Map,H={set(t,e,i){M.has(t)||M.set(t,new Map);const n=M.get(t);n.has(e)||0===n.size?n.set(e,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(t,e)=>M.has(t)&&M.get(t).get(e)||null,remove(t,e){if(!M.has(t))return;const i=M.get(t);i.delete(e),0===i.size&&M.delete(t)}};function $(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function W(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const B={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${W(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${W(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=$(t.dataset[n])}return e},getDataAttribute:(t,e)=>$(t.getAttribute(`data-bs-${W(e)}`))};class F{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=o(e)?B.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...o(e)?B.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const n of Object.keys(e)){const s=e[n],r=t[n],a=o(r)?"element":null==(i=r)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(a))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${a}" but expected type "${s}".`)}var i}}class z extends F{constructor(t,e){super(),(t=r(t))&&(this._element=t,this._config=this._getConfig(e),H.set(this._element,this.constructor.DATA_KEY,this))}dispose(){H.remove(this._element,this.constructor.DATA_KEY),P.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){_(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return H.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.2.3"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const q=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,s=t.NAME;P.on(document,i,`[data-bs-dismiss="${s}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),l(this))return;const o=n(this)||this.closest(`.${s}`);t.getOrCreateInstance(o)[e]()}))};class R extends z{static get NAME(){return"alert"}close(){if(P.trigger(this._element,"close.bs.alert").defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),P.trigger(this._element,"closed.bs.alert"),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=R.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}q(R,"close"),g(R);const V='[data-bs-toggle="button"]';class K extends z{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=K.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}P.on(document,"click.bs.button.data-api",V,(t=>{t.preventDefault();const e=t.target.closest(V);K.getOrCreateInstance(e).toggle()})),g(K);const Q={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!l(t)&&a(t)))}},X={endCallback:null,leftCallback:null,rightCallback:null},Y={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class U extends F{constructor(t,e){super(),this._element=t,t&&U.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return X}static get DefaultType(){return Y}static get NAME(){return"swipe"}dispose(){P.off(this._element,".bs.swipe")}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),m(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&m(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(P.on(this._element,"pointerdown.bs.swipe",(t=>this._start(t))),P.on(this._element,"pointerup.bs.swipe",(t=>this._end(t))),this._element.classList.add("pointer-event")):(P.on(this._element,"touchstart.bs.swipe",(t=>this._start(t))),P.on(this._element,"touchmove.bs.swipe",(t=>this._move(t))),P.on(this._element,"touchend.bs.swipe",(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const G="next",J="prev",Z="left",tt="right",et="slid.bs.carousel",it="carousel",nt="active",st={ArrowLeft:tt,ArrowRight:Z},ot={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},rt={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class at extends z{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=Q.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===it&&this.cycle()}static get Default(){return ot}static get DefaultType(){return rt}static get NAME(){return"carousel"}next(){this._slide(G)}nextWhenVisible(){!document.hidden&&a(this._element)&&this.next()}prev(){this._slide(J)}pause(){this._isSliding&&s(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?P.one(this._element,et,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void P.one(this._element,et,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?G:J;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&P.on(this._element,"keydown.bs.carousel",(t=>this._keydown(t))),"hover"===this._config.pause&&(P.on(this._element,"mouseenter.bs.carousel",(()=>this.pause())),P.on(this._element,"mouseleave.bs.carousel",(()=>this._maybeEnableCycle()))),this._config.touch&&U.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of Q.find(".carousel-item img",this._element))P.on(t,"dragstart.bs.carousel",(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(Z)),rightCallback:()=>this._slide(this._directionToOrder(tt)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new U(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=st[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=Q.findOne(".active",this._indicatorsElement);e.classList.remove(nt),e.removeAttribute("aria-current");const i=Q.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(nt),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===G,s=e||b(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>P.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r("slide.bs.carousel").defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),d(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(nt),i.classList.remove(nt,c,l),this._isSliding=!1,r(et)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return Q.findOne(".active.carousel-item",this._element)}_getItems(){return Q.find(".carousel-item",this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return p()?t===Z?J:G:t===Z?G:J}_orderToDirection(t){return p()?t===J?Z:tt:t===J?tt:Z}static jQueryInterface(t){return this.each((function(){const e=at.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}P.on(document,"click.bs.carousel.data-api","[data-bs-slide], [data-bs-slide-to]",(function(t){const e=n(this);if(!e||!e.classList.contains(it))return;t.preventDefault();const i=at.getOrCreateInstance(e),s=this.getAttribute("data-bs-slide-to");return s?(i.to(s),void i._maybeEnableCycle()):"next"===B.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),P.on(window,"load.bs.carousel.data-api",(()=>{const t=Q.find('[data-bs-ride="carousel"]');for(const e of t)at.getOrCreateInstance(e)})),g(at);const lt="show",ct="collapse",ht="collapsing",dt='[data-bs-toggle="collapse"]',ut={parent:null,toggle:!0},ft={parent:"(null|element)",toggle:"boolean"};class pt extends z{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const n=Q.find(dt);for(const t of n){const e=i(t),n=Q.find(e).filter((t=>t===this._element));null!==e&&n.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return ut}static get DefaultType(){return ft}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>pt.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(P.trigger(this._element,"show.bs.collapse").defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(ct),this._element.classList.add(ht),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct,lt),this._element.style[e]="",P.trigger(this._element,"shown.bs.collapse")}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(P.trigger(this._element,"hide.bs.collapse").defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,d(this._element),this._element.classList.add(ht),this._element.classList.remove(ct,lt);for(const t of this._triggerArray){const e=n(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct),P.trigger(this._element,"hidden.bs.collapse")}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(lt)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=r(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(dt);for(const e of t){const t=n(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=Q.find(":scope .collapse .collapse",this._config.parent);return Q.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=pt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}P.on(document,"click.bs.collapse.data-api",dt,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();const e=i(this),n=Q.find(e);for(const t of n)pt.getOrCreateInstance(t,{toggle:!1}).toggle()})),g(pt);var gt="top",mt="bottom",_t="right",bt="left",vt="auto",yt=[gt,mt,_t,bt],wt="start",At="end",Et="clippingParents",Tt="viewport",Ct="popper",Ot="reference",xt=yt.reduce((function(t,e){return t.concat([e+"-"+wt,e+"-"+At])}),[]),kt=[].concat(yt,[vt]).reduce((function(t,e){return t.concat([e,e+"-"+wt,e+"-"+At])}),[]),Lt="beforeRead",Dt="read",St="afterRead",It="beforeMain",Nt="main",Pt="afterMain",jt="beforeWrite",Mt="write",Ht="afterWrite",$t=[Lt,Dt,St,It,Nt,Pt,jt,Mt,Ht];function Wt(t){return t?(t.nodeName||"").toLowerCase():null}function Bt(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function Ft(t){return t instanceof Bt(t).Element||t instanceof Element}function zt(t){return t instanceof Bt(t).HTMLElement||t instanceof HTMLElement}function qt(t){return"undefined"!=typeof ShadowRoot&&(t instanceof Bt(t).ShadowRoot||t instanceof ShadowRoot)}const Rt={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];zt(s)&&Wt(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});zt(n)&&Wt(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function Vt(t){return t.split("-")[0]}var Kt=Math.max,Qt=Math.min,Xt=Math.round;function Yt(){var t=navigator.userAgentData;return null!=t&&t.brands?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function Ut(){return!/^((?!chrome|android).)*safari/i.test(Yt())}function Gt(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&zt(t)&&(s=t.offsetWidth>0&&Xt(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&Xt(n.height)/t.offsetHeight||1);var r=(Ft(t)?Bt(t):window).visualViewport,a=!Ut()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function Jt(t){var e=Gt(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Zt(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&qt(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function te(t){return Bt(t).getComputedStyle(t)}function ee(t){return["table","td","th"].indexOf(Wt(t))>=0}function ie(t){return((Ft(t)?t.ownerDocument:t.document)||window.document).documentElement}function ne(t){return"html"===Wt(t)?t:t.assignedSlot||t.parentNode||(qt(t)?t.host:null)||ie(t)}function se(t){return zt(t)&&"fixed"!==te(t).position?t.offsetParent:null}function oe(t){for(var e=Bt(t),i=se(t);i&&ee(i)&&"static"===te(i).position;)i=se(i);return i&&("html"===Wt(i)||"body"===Wt(i)&&"static"===te(i).position)?e:i||function(t){var e=/firefox/i.test(Yt());if(/Trident/i.test(Yt())&&zt(t)&&"fixed"===te(t).position)return null;var i=ne(t);for(qt(i)&&(i=i.host);zt(i)&&["html","body"].indexOf(Wt(i))<0;){var n=te(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function re(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function ae(t,e,i){return Kt(t,Qt(e,i))}function le(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function ce(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const he={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=Vt(i.placement),l=re(a),c=[bt,_t].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return le("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:ce(t,yt))}(s.padding,i),d=Jt(o),u="y"===l?gt:bt,f="y"===l?mt:_t,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],g=r[l]-i.rects.reference[l],m=oe(o),_=m?"y"===l?m.clientHeight||0:m.clientWidth||0:0,b=p/2-g/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,A=ae(v,w,y),E=l;i.modifiersData[n]=((e={})[E]=A,e.centerOffset=A-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Zt(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function de(t){return t.split("-")[1]}var ue={top:"auto",right:"auto",bottom:"auto",left:"auto"};function fe(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=t.isFixed,u=r.x,f=void 0===u?0:u,p=r.y,g=void 0===p?0:p,m="function"==typeof h?h({x:f,y:g}):{x:f,y:g};f=m.x,g=m.y;var _=r.hasOwnProperty("x"),b=r.hasOwnProperty("y"),v=bt,y=gt,w=window;if(c){var A=oe(i),E="clientHeight",T="clientWidth";A===Bt(i)&&"static"!==te(A=ie(i)).position&&"absolute"===a&&(E="scrollHeight",T="scrollWidth"),(s===gt||(s===bt||s===_t)&&o===At)&&(y=mt,g-=(d&&A===w&&w.visualViewport?w.visualViewport.height:A[E])-n.height,g*=l?1:-1),s!==bt&&(s!==gt&&s!==mt||o!==At)||(v=_t,f-=(d&&A===w&&w.visualViewport?w.visualViewport.width:A[T])-n.width,f*=l?1:-1)}var C,O=Object.assign({position:a},c&&ue),x=!0===h?function(t){var e=t.x,i=t.y,n=window.devicePixelRatio||1;return{x:Xt(e*n)/n||0,y:Xt(i*n)/n||0}}({x:f,y:g}):{x:f,y:g};return f=x.x,g=x.y,l?Object.assign({},O,((C={})[y]=b?"0":"",C[v]=_?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+f+"px, "+g+"px)":"translate3d("+f+"px, "+g+"px, 0)",C)):Object.assign({},O,((e={})[y]=b?g+"px":"",e[v]=_?f+"px":"",e.transform="",e))}const pe={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:Vt(e.placement),variation:de(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,fe(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,fe(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var ge={passive:!0};const me={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=Bt(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,ge)})),a&&l.addEventListener("resize",i.update,ge),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,ge)})),a&&l.removeEventListener("resize",i.update,ge)}},data:{}};var _e={left:"right",right:"left",bottom:"top",top:"bottom"};function be(t){return t.replace(/left|right|bottom|top/g,(function(t){return _e[t]}))}var ve={start:"end",end:"start"};function ye(t){return t.replace(/start|end/g,(function(t){return ve[t]}))}function we(t){var e=Bt(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Ae(t){return Gt(ie(t)).left+we(t).scrollLeft}function Ee(t){var e=te(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Te(t){return["html","body","#document"].indexOf(Wt(t))>=0?t.ownerDocument.body:zt(t)&&Ee(t)?t:Te(ne(t))}function Ce(t,e){var i;void 0===e&&(e=[]);var n=Te(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=Bt(n),r=s?[o].concat(o.visualViewport||[],Ee(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Ce(ne(r)))}function Oe(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function xe(t,e,i){return e===Tt?Oe(function(t,e){var i=Bt(t),n=ie(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=Ut();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+Ae(t),y:l}}(t,i)):Ft(e)?function(t,e){var i=Gt(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):Oe(function(t){var e,i=ie(t),n=we(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=Kt(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=Kt(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+Ae(t),l=-n.scrollTop;return"rtl"===te(s||i).direction&&(a+=Kt(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(ie(t)))}function ke(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?Vt(s):null,r=s?de(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case gt:e={x:a,y:i.y-n.height};break;case mt:e={x:a,y:i.y+i.height};break;case _t:e={x:i.x+i.width,y:l};break;case bt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?re(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case wt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case At:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function Le(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.strategy,r=void 0===o?t.strategy:o,a=i.boundary,l=void 0===a?Et:a,c=i.rootBoundary,h=void 0===c?Tt:c,d=i.elementContext,u=void 0===d?Ct:d,f=i.altBoundary,p=void 0!==f&&f,g=i.padding,m=void 0===g?0:g,_=le("number"!=typeof m?m:ce(m,yt)),b=u===Ct?Ot:Ct,v=t.rects.popper,y=t.elements[p?b:u],w=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=Ce(ne(t)),i=["absolute","fixed"].indexOf(te(t).position)>=0&&zt(t)?oe(t):t;return Ft(i)?e.filter((function(t){return Ft(t)&&Zt(t,i)&&"body"!==Wt(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=xe(t,i,n);return e.top=Kt(s.top,e.top),e.right=Qt(s.right,e.right),e.bottom=Qt(s.bottom,e.bottom),e.left=Kt(s.left,e.left),e}),xe(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(Ft(y)?y:y.contextElement||ie(t.elements.popper),l,h,r),A=Gt(t.elements.reference),E=ke({reference:A,element:v,strategy:"absolute",placement:s}),T=Oe(Object.assign({},v,E)),C=u===Ct?T:A,O={top:w.top-C.top+_.top,bottom:C.bottom-w.bottom+_.bottom,left:w.left-C.left+_.left,right:C.right-w.right+_.right},x=t.modifiersData.offset;if(u===Ct&&x){var k=x[s];Object.keys(O).forEach((function(t){var e=[_t,mt].indexOf(t)>=0?1:-1,i=[gt,mt].indexOf(t)>=0?"y":"x";O[t]+=k[i]*e}))}return O}function De(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?kt:l,h=de(n),d=h?a?xt:xt.filter((function(t){return de(t)===h})):yt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=Le(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[Vt(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const Se={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,g=i.allowedAutoPlacements,m=e.options.placement,_=Vt(m),b=l||(_!==m&&p?function(t){if(Vt(t)===vt)return[];var e=be(t);return[ye(t),e,ye(e)]}(m):[be(m)]),v=[m].concat(b).reduce((function(t,i){return t.concat(Vt(i)===vt?De(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:g}):i)}),[]),y=e.rects.reference,w=e.rects.popper,A=new Map,E=!0,T=v[0],C=0;C =0,D=L?"width":"height",S=Le(e,{placement:O,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),I=L?k?_t:bt:k?mt:gt;y[D]>w[D]&&(I=be(I));var N=be(I),P=[];if(o&&P.push(S[x]<=0),a&&P.push(S[I]<=0,S[N]<=0),P.every((function(t){return t}))){T=O,E=!1;break}A.set(O,P)}if(E)for(var j=function(t){var e=v.find((function(e){var i=A.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==j(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function Ie(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function Ne(t){return[gt,_t,mt,bt].some((function(e){return t[e]>=0}))}const Pe={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=Le(e,{elementContext:"reference"}),a=Le(e,{altBoundary:!0}),l=Ie(r,n),c=Ie(a,s,o),h=Ne(l),d=Ne(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},je={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=kt.reduce((function(t,i){return t[i]=function(t,e,i){var n=Vt(t),s=[bt,gt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[bt,_t].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},Me={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=ke({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},He={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,g=void 0===p?0:p,m=Le(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=Vt(e.placement),b=de(e.placement),v=!b,y=re(_),w="x"===y?"y":"x",A=e.modifiersData.popperOffsets,E=e.rects.reference,T=e.rects.popper,C="function"==typeof g?g(Object.assign({},e.rects,{placement:e.placement})):g,O="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),x=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,k={x:0,y:0};if(A){if(o){var L,D="y"===y?gt:bt,S="y"===y?mt:_t,I="y"===y?"height":"width",N=A[y],P=N+m[D],j=N-m[S],M=f?-T[I]/2:0,H=b===wt?E[I]:T[I],$=b===wt?-T[I]:-E[I],W=e.elements.arrow,B=f&&W?Jt(W):{width:0,height:0},F=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=F[D],q=F[S],R=ae(0,E[I],B[I]),V=v?E[I]/2-M-R-z-O.mainAxis:H-R-z-O.mainAxis,K=v?-E[I]/2+M+R+q+O.mainAxis:$+R+q+O.mainAxis,Q=e.elements.arrow&&oe(e.elements.arrow),X=Q?"y"===y?Q.clientTop||0:Q.clientLeft||0:0,Y=null!=(L=null==x?void 0:x[y])?L:0,U=N+K-Y,G=ae(f?Qt(P,N+V-Y-X):P,N,f?Kt(j,U):j);A[y]=G,k[y]=G-N}if(a){var J,Z="x"===y?gt:bt,tt="x"===y?mt:_t,et=A[w],it="y"===w?"height":"width",nt=et+m[Z],st=et-m[tt],ot=-1!==[gt,bt].indexOf(_),rt=null!=(J=null==x?void 0:x[w])?J:0,at=ot?nt:et-E[it]-T[it]-rt+O.altAxis,lt=ot?et+E[it]+T[it]-rt-O.altAxis:st,ct=f&&ot?function(t,e,i){var n=ae(t,e,i);return n>i?i:n}(at,et,lt):ae(f?at:nt,et,f?lt:st);A[w]=ct,k[w]=ct-et}e.modifiersData[n]=k}},requiresIfExists:["offset"]};function $e(t,e,i){void 0===i&&(i=!1);var n,s,o=zt(e),r=zt(e)&&function(t){var e=t.getBoundingClientRect(),i=Xt(e.width)/t.offsetWidth||1,n=Xt(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=ie(e),l=Gt(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==Wt(e)||Ee(a))&&(c=(n=e)!==Bt(n)&&zt(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:we(n)),zt(e)?((h=Gt(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=Ae(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function We(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var Be={placement:"bottom",modifiers:[],strategy:"absolute"};function Fe(){for(var t=arguments.length,e=new Array(t),i=0;i Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(B.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,..."function"==typeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem({key:t,target:e}){const i=Q.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>a(t)));i.length&&b(i,e,t===Ye,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=hi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=Q.find(ti);for(const i of e){const e=hi.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Xe,Ye].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Ze)?this:Q.prev(this,Ze)[0]||Q.next(this,Ze)[0]||Q.findOne(Ze,t.delegateTarget.parentNode),o=hi.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}P.on(document,Ge,Ze,hi.dataApiKeydownHandler),P.on(document,Ge,ei,hi.dataApiKeydownHandler),P.on(document,Ue,hi.clearMenus),P.on(document,"keyup.bs.dropdown.data-api",hi.clearMenus),P.on(document,Ue,Ze,(function(t){t.preventDefault(),hi.getOrCreateInstance(this).toggle()})),g(hi);const di=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",ui=".sticky-top",fi="padding-right",pi="margin-right";class gi{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,fi,(e=>e+t)),this._setElementAttributes(di,fi,(e=>e+t)),this._setElementAttributes(ui,pi,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,fi),this._resetElementAttributes(di,fi),this._resetElementAttributes(ui,pi)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&B.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=B.getDataAttribute(t,e);null!==i?(B.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(o(t))e(t);else for(const i of Q.find(t,this._element))e(i)}}const mi="show",_i="mousedown.bs.backdrop",bi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},vi={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class yi extends F{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return bi}static get DefaultType(){return vi}static get NAME(){return"backdrop"}show(t){if(!this._config.isVisible)return void m(t);this._append();const e=this._getElement();this._config.isAnimated&&d(e),e.classList.add(mi),this._emulateAnimation((()=>{m(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(mi),this._emulateAnimation((()=>{this.dispose(),m(t)}))):m(t)}dispose(){this._isAppended&&(P.off(this._element,_i),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=r(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),P.on(t,_i,(()=>{m(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){_(t,this._getElement(),this._config.isAnimated)}}const wi=".bs.focustrap",Ai="backward",Ei={autofocus:!0,trapElement:null},Ti={autofocus:"boolean",trapElement:"element"};class Ci extends F{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return Ei}static get DefaultType(){return Ti}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),P.off(document,wi),P.on(document,"focusin.bs.focustrap",(t=>this._handleFocusin(t))),P.on(document,"keydown.tab.bs.focustrap",(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,P.off(document,wi))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=Q.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===Ai?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?Ai:"forward")}}const Oi="hidden.bs.modal",xi="show.bs.modal",ki="modal-open",Li="show",Di="modal-static",Si={backdrop:!0,focus:!0,keyboard:!0},Ii={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class Ni extends z{constructor(t,e){super(t,e),this._dialog=Q.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new gi,this._addEventListeners()}static get Default(){return Si}static get DefaultType(){return Ii}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||P.trigger(this._element,xi,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(ki),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(P.trigger(this._element,"hide.bs.modal").defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(Li),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){for(const t of[window,this._dialog])P.off(t,".bs.modal");this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new yi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Ci({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=Q.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),d(this._element),this._element.classList.add(Li),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,P.trigger(this._element,"shown.bs.modal",{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){P.on(this._element,"keydown.dismiss.bs.modal",(t=>{if("Escape"===t.key)return this._config.keyboard?(t.preventDefault(),void this.hide()):void this._triggerBackdropTransition()})),P.on(window,"resize.bs.modal",(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),P.on(this._element,"mousedown.dismiss.bs.modal",(t=>{P.one(this._element,"click.dismiss.bs.modal",(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(ki),this._resetAdjustments(),this._scrollBar.reset(),P.trigger(this._element,Oi)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(P.trigger(this._element,"hidePrevented.bs.modal").defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(Di)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(Di),this._queueCallback((()=>{this._element.classList.remove(Di),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=p()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=p()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=Ni.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}P.on(document,"click.bs.modal.data-api",'[data-bs-toggle="modal"]',(function(t){const e=n(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),P.one(e,xi,(t=>{t.defaultPrevented||P.one(e,Oi,(()=>{a(this)&&this.focus()}))}));const i=Q.findOne(".modal.show");i&&Ni.getInstance(i).hide(),Ni.getOrCreateInstance(e).toggle(this)})),q(Ni),g(Ni);const Pi="show",ji="showing",Mi="hiding",Hi=".offcanvas.show",$i="hidePrevented.bs.offcanvas",Wi="hidden.bs.offcanvas",Bi={backdrop:!0,keyboard:!0,scroll:!1},Fi={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class zi extends z{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Bi}static get DefaultType(){return Fi}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||P.trigger(this._element,"show.bs.offcanvas",{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new gi).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(ji),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Pi),this._element.classList.remove(ji),P.trigger(this._element,"shown.bs.offcanvas",{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(P.trigger(this._element,"hide.bs.offcanvas").defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(Mi),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(Pi,Mi),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new gi).reset(),P.trigger(this._element,Wi)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new yi({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():P.trigger(this._element,$i)}:null})}_initializeFocusTrap(){return new Ci({trapElement:this._element})}_addEventListeners(){P.on(this._element,"keydown.dismiss.bs.offcanvas",(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():P.trigger(this._element,$i))}))}static jQueryInterface(t){return this.each((function(){const e=zi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}P.on(document,"click.bs.offcanvas.data-api",'[data-bs-toggle="offcanvas"]',(function(t){const e=n(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this))return;P.one(e,Wi,(()=>{a(this)&&this.focus()}));const i=Q.findOne(Hi);i&&i!==e&&zi.getInstance(i).hide(),zi.getOrCreateInstance(e).toggle(this)})),P.on(window,"load.bs.offcanvas.data-api",(()=>{for(const t of Q.find(Hi))zi.getOrCreateInstance(t).show()})),P.on(window,"resize.bs.offcanvas",(()=>{for(const t of Q.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&zi.getOrCreateInstance(t).hide()})),q(zi),g(zi);const qi=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Ri=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,Vi=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,Ki=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!qi.has(i)||Boolean(Ri.test(t.nodeValue)||Vi.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Qi={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Xi={allowList:Qi,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:""},Yi={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Ui={entry:"(string|element|function|null)",selector:"(string|element)"};class Gi extends F{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Xi}static get DefaultType(){return Yi}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Ui)}_setContent(t,e,i){const n=Q.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?o(e)?this._putElementInTemplate(r(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Ki(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return"function"==typeof t?t(this):t}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Ji=new Set(["sanitize","allowList","sanitizeFn"]),Zi="fade",tn="show",en=".modal",nn="hide.bs.modal",sn="hover",on="focus",rn={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},an={allowList:Qi,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,0],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:' ',title:"",trigger:"hover focus"},ln={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class cn extends z{constructor(t,e){if(void 0===Ke)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return an}static get DefaultType(){return ln}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),P.off(this._element.closest(en),nn,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=P.trigger(this._element,this.constructor.eventName("show")),e=(c(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),P.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(tn),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))P.on(t,"mouseover",h);this._queueCallback((()=>{P.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!P.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(tn),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))P.off(t,"mouseover",h);this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),P.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(Zi,tn),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(Zi),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Gi({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(Zi)}_isShown(){return this.tip&&this.tip.classList.contains(tn)}_createPopper(t){const e="function"==typeof this._config.placement?this._config.placement.call(this,t,this._element):this._config.placement,i=rn[e.toUpperCase()];return Ve(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return"function"==typeof t?t.call(this._element):t}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,..."function"==typeof this._config.popperConfig?this._config.popperConfig(e):this._config.popperConfig}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)P.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===sn?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===sn?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");P.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?on:sn]=!0,e._enter()})),P.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?on:sn]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},P.on(this._element.closest(en),nn,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=B.getDataAttributes(this._element);for(const t of Object.keys(e))Ji.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const e in this._config)this.constructor.Default[e]!==this._config[e]&&(t[e]=this._config[e]);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=cn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}g(cn);const hn={...cn.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},dn={...cn.DefaultType,content:"(null|string|element|function)"};class un extends cn{static get Default(){return hn}static get DefaultType(){return dn}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=un.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}g(un);const fn="click.bs.scrollspy",pn="active",gn="[href]",mn={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},_n={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class bn extends z{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return mn}static get DefaultType(){return _n}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=r(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(P.off(this._config.target,fn),P.on(this._config.target,fn,gn,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=Q.find(gn,this._config.target);for(const e of t){if(!e.hash||l(e))continue;const t=Q.findOne(e.hash,this._element);a(t)&&(this._targetLinks.set(e.hash,e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(pn),this._activateParents(t),P.trigger(this._element,"activate.bs.scrollspy",{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))Q.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(pn);else for(const e of Q.parents(t,".nav, .list-group"))for(const t of Q.prev(e,".nav-link, .nav-item > .nav-link, .list-group-item"))t.classList.add(pn)}_clearActiveClass(t){t.classList.remove(pn);const e=Q.find("[href].active",t);for(const t of e)t.classList.remove(pn)}static jQueryInterface(t){return this.each((function(){const e=bn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}P.on(window,"load.bs.scrollspy.data-api",(()=>{for(const t of Q.find('[data-bs-spy="scroll"]'))bn.getOrCreateInstance(t)})),g(bn);const vn="ArrowLeft",yn="ArrowRight",wn="ArrowUp",An="ArrowDown",En="active",Tn="fade",Cn="show",On='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',xn=`.nav-link:not(.dropdown-toggle), .list-group-item:not(.dropdown-toggle), [role="tab"]:not(.dropdown-toggle), ${On}`;class kn extends z{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),P.on(this._element,"keydown.bs.tab",(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?P.trigger(e,"hide.bs.tab",{relatedTarget:t}):null;P.trigger(t,"show.bs.tab",{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(En),this._activate(n(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),P.trigger(t,"shown.bs.tab",{relatedTarget:e})):t.classList.add(Cn)}),t,t.classList.contains(Tn)))}_deactivate(t,e){t&&(t.classList.remove(En),t.blur(),this._deactivate(n(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),P.trigger(t,"hidden.bs.tab",{relatedTarget:e})):t.classList.remove(Cn)}),t,t.classList.contains(Tn)))}_keydown(t){if(![vn,yn,wn,An].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=[yn,An].includes(t.key),i=b(this._getChildren().filter((t=>!l(t))),t.target,e,!0);i&&(i.focus({preventScroll:!0}),kn.getOrCreateInstance(i).show())}_getChildren(){return Q.find(xn,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=n(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`#${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=Q.findOne(t,i);s&&s.classList.toggle(n,e)};n(".dropdown-toggle",En),n(".dropdown-menu",Cn),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(En)}_getInnerElement(t){return t.matches(xn)?t:Q.findOne(xn,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=kn.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}P.on(document,"click.bs.tab",On,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this)||kn.getOrCreateInstance(this).show()})),P.on(window,"load.bs.tab",(()=>{for(const t of Q.find('.active[data-bs-toggle="tab"], .active[data-bs-toggle="pill"], .active[data-bs-toggle="list"]'))kn.getOrCreateInstance(t)})),g(kn);const Ln="hide",Dn="show",Sn="showing",In={animation:"boolean",autohide:"boolean",delay:"number"},Nn={animation:!0,autohide:!0,delay:5e3};class Pn extends z{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return Nn}static get DefaultType(){return In}static get NAME(){return"toast"}show(){P.trigger(this._element,"show.bs.toast").defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(Ln),d(this._element),this._element.classList.add(Dn,Sn),this._queueCallback((()=>{this._element.classList.remove(Sn),P.trigger(this._element,"shown.bs.toast"),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(P.trigger(this._element,"hide.bs.toast").defaultPrevented||(this._element.classList.add(Sn),this._queueCallback((()=>{this._element.classList.add(Ln),this._element.classList.remove(Sn,Dn),P.trigger(this._element,"hidden.bs.toast")}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(Dn),super.dispose()}isShown(){return this._element.classList.contains(Dn)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){P.on(this._element,"mouseover.bs.toast",(t=>this._onInteraction(t,!0))),P.on(this._element,"mouseout.bs.toast",(t=>this._onInteraction(t,!1))),P.on(this._element,"focusin.bs.toast",(t=>this._onInteraction(t,!0))),P.on(this._element,"focusout.bs.toast",(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=Pn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return q(Pn),g(Pn),{Alert:R,Button:K,Carousel:at,Collapse:pt,Dropdown:hi,Modal:Ni,Offcanvas:zi,Popover:un,ScrollSpy:bn,Tab:kn,Toast:Pn,Tooltip:cn}})); -//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t="transitionend",e=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e},i=t=>{const i=e(t);return i&&document.querySelector(i)?i:null},n=t=>{const i=e(t);return i?document.querySelector(i):null},s=e=>{e.dispatchEvent(new Event(t))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(t):null,a=t=>{if(!o(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},l=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),c=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?c(t.parentNode):null},h=()=>{},d=t=>{t.offsetHeight},u=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,f=[],p=()=>"rtl"===document.documentElement.dir,g=t=>{var e;e=()=>{const e=u();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of f)t()})),f.push(e)):e()},m=t=>{"function"==typeof t&&t()},_=(e,i,n=!0)=>{if(!n)return void m(e);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(i)+5;let r=!1;const a=({target:n})=>{n===i&&(r=!0,i.removeEventListener(t,a),m(e))};i.addEventListener(t,a),setTimeout((()=>{r||s(i)}),o)},b=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},v=/[^.]*(?=\..*)\.|.*/,y=/\..*/,w=/::\d+$/,A={};let E=1;const T={mouseenter:"mouseover",mouseleave:"mouseout"},C=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function O(t,e){return e&&`${e}::${E++}`||t.uidEvent||E++}function x(t){const e=O(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function k(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function L(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=N(t);return C.has(o)||(o=t),[n,s,o]}function D(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=L(e,i,n);if(e in T){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=x(t),c=l[a]||(l[a]={}),h=k(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=O(r,e.replace(v,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return j(s,{delegateTarget:r}),n.oneOff&&P.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return j(n,{delegateTarget:t}),i.oneOff&&P.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function S(t,e,i,n,s){const o=k(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function I(t,e,i,n){const s=e[i]||{};for(const o of Object.keys(s))if(o.includes(n)){const n=s[o];S(t,e,i,n.callable,n.delegationSelector)}}function N(t){return t=t.replace(y,""),T[t]||t}const P={on(t,e,i,n){D(t,e,i,n,!1)},one(t,e,i,n){D(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=L(e,i,n),a=r!==e,l=x(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))I(t,l,i,e.slice(1));for(const i of Object.keys(c)){const n=i.replace(w,"");if(!a||e.includes(n)){const e=c[i];S(t,l,r,e.callable,e.delegationSelector)}}}else{if(!Object.keys(c).length)return;S(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=u();let s=null,o=!0,r=!0,a=!1;e!==N(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());let l=new Event(e,{bubbles:o,cancelable:!0});return l=j(l,i),a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function j(t,e){for(const[i,n]of Object.entries(e||{}))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}const M=new Map,H={set(t,e,i){M.has(t)||M.set(t,new Map);const n=M.get(t);n.has(e)||0===n.size?n.set(e,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(t,e)=>M.has(t)&&M.get(t).get(e)||null,remove(t,e){if(!M.has(t))return;const i=M.get(t);i.delete(e),0===i.size&&M.delete(t)}};function $(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function W(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const B={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${W(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${W(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=$(t.dataset[n])}return e},getDataAttribute:(t,e)=>$(t.getAttribute(`data-bs-${W(e)}`))};class F{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=o(e)?B.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...o(e)?B.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const n of Object.keys(e)){const s=e[n],r=t[n],a=o(r)?"element":null==(i=r)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(a))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${a}" but expected type "${s}".`)}var i}}class z extends F{constructor(t,e){super(),(t=r(t))&&(this._element=t,this._config=this._getConfig(e),H.set(this._element,this.constructor.DATA_KEY,this))}dispose(){H.remove(this._element,this.constructor.DATA_KEY),P.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){_(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return H.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.2.3"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const q=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,s=t.NAME;P.on(document,i,`[data-bs-dismiss="${s}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),l(this))return;const o=n(this)||this.closest(`.${s}`);t.getOrCreateInstance(o)[e]()}))};class R extends z{static get NAME(){return"alert"}close(){if(P.trigger(this._element,"close.bs.alert").defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),P.trigger(this._element,"closed.bs.alert"),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=R.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}q(R,"close"),g(R);const V='[data-bs-toggle="button"]';class K extends z{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=K.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}P.on(document,"click.bs.button.data-api",V,(t=>{t.preventDefault();const e=t.target.closest(V);K.getOrCreateInstance(e).toggle()})),g(K);const Q={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!l(t)&&a(t)))}},X={endCallback:null,leftCallback:null,rightCallback:null},Y={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class U extends F{constructor(t,e){super(),this._element=t,t&&U.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return X}static get DefaultType(){return Y}static get NAME(){return"swipe"}dispose(){P.off(this._element,".bs.swipe")}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),m(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&m(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(P.on(this._element,"pointerdown.bs.swipe",(t=>this._start(t))),P.on(this._element,"pointerup.bs.swipe",(t=>this._end(t))),this._element.classList.add("pointer-event")):(P.on(this._element,"touchstart.bs.swipe",(t=>this._start(t))),P.on(this._element,"touchmove.bs.swipe",(t=>this._move(t))),P.on(this._element,"touchend.bs.swipe",(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const G="next",J="prev",Z="left",tt="right",et="slid.bs.carousel",it="carousel",nt="active",st={ArrowLeft:tt,ArrowRight:Z},ot={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},rt={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class at extends z{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=Q.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===it&&this.cycle()}static get Default(){return ot}static get DefaultType(){return rt}static get NAME(){return"carousel"}next(){this._slide(G)}nextWhenVisible(){!document.hidden&&a(this._element)&&this.next()}prev(){this._slide(J)}pause(){this._isSliding&&s(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?P.one(this._element,et,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void P.one(this._element,et,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?G:J;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&P.on(this._element,"keydown.bs.carousel",(t=>this._keydown(t))),"hover"===this._config.pause&&(P.on(this._element,"mouseenter.bs.carousel",(()=>this.pause())),P.on(this._element,"mouseleave.bs.carousel",(()=>this._maybeEnableCycle()))),this._config.touch&&U.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of Q.find(".carousel-item img",this._element))P.on(t,"dragstart.bs.carousel",(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(Z)),rightCallback:()=>this._slide(this._directionToOrder(tt)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new U(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=st[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=Q.findOne(".active",this._indicatorsElement);e.classList.remove(nt),e.removeAttribute("aria-current");const i=Q.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(nt),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===G,s=e||b(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>P.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r("slide.bs.carousel").defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),d(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(nt),i.classList.remove(nt,c,l),this._isSliding=!1,r(et)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return Q.findOne(".active.carousel-item",this._element)}_getItems(){return Q.find(".carousel-item",this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return p()?t===Z?J:G:t===Z?G:J}_orderToDirection(t){return p()?t===J?Z:tt:t===J?tt:Z}static jQueryInterface(t){return this.each((function(){const e=at.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}P.on(document,"click.bs.carousel.data-api","[data-bs-slide], [data-bs-slide-to]",(function(t){const e=n(this);if(!e||!e.classList.contains(it))return;t.preventDefault();const i=at.getOrCreateInstance(e),s=this.getAttribute("data-bs-slide-to");return s?(i.to(s),void i._maybeEnableCycle()):"next"===B.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),P.on(window,"load.bs.carousel.data-api",(()=>{const t=Q.find('[data-bs-ride="carousel"]');for(const e of t)at.getOrCreateInstance(e)})),g(at);const lt="show",ct="collapse",ht="collapsing",dt='[data-bs-toggle="collapse"]',ut={parent:null,toggle:!0},ft={parent:"(null|element)",toggle:"boolean"};class pt extends z{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const n=Q.find(dt);for(const t of n){const e=i(t),n=Q.find(e).filter((t=>t===this._element));null!==e&&n.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return ut}static get DefaultType(){return ft}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>pt.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(P.trigger(this._element,"show.bs.collapse").defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(ct),this._element.classList.add(ht),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct,lt),this._element.style[e]="",P.trigger(this._element,"shown.bs.collapse")}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(P.trigger(this._element,"hide.bs.collapse").defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,d(this._element),this._element.classList.add(ht),this._element.classList.remove(ct,lt);for(const t of this._triggerArray){const e=n(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct),P.trigger(this._element,"hidden.bs.collapse")}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(lt)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=r(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(dt);for(const e of t){const t=n(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=Q.find(":scope .collapse .collapse",this._config.parent);return Q.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=pt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}P.on(document,"click.bs.collapse.data-api",dt,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();const e=i(this),n=Q.find(e);for(const t of n)pt.getOrCreateInstance(t,{toggle:!1}).toggle()})),g(pt);var gt="top",mt="bottom",_t="right",bt="left",vt="auto",yt=[gt,mt,_t,bt],wt="start",At="end",Et="clippingParents",Tt="viewport",Ct="popper",Ot="reference",xt=yt.reduce((function(t,e){return t.concat([e+"-"+wt,e+"-"+At])}),[]),kt=[].concat(yt,[vt]).reduce((function(t,e){return t.concat([e,e+"-"+wt,e+"-"+At])}),[]),Lt="beforeRead",Dt="read",St="afterRead",It="beforeMain",Nt="main",Pt="afterMain",jt="beforeWrite",Mt="write",Ht="afterWrite",$t=[Lt,Dt,St,It,Nt,Pt,jt,Mt,Ht];function Wt(t){return t?(t.nodeName||"").toLowerCase():null}function Bt(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function Ft(t){return t instanceof Bt(t).Element||t instanceof Element}function zt(t){return t instanceof Bt(t).HTMLElement||t instanceof HTMLElement}function qt(t){return"undefined"!=typeof ShadowRoot&&(t instanceof Bt(t).ShadowRoot||t instanceof ShadowRoot)}const Rt={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];zt(s)&&Wt(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});zt(n)&&Wt(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function Vt(t){return t.split("-")[0]}var Kt=Math.max,Qt=Math.min,Xt=Math.round;function Yt(){var t=navigator.userAgentData;return null!=t&&t.brands?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function Ut(){return!/^((?!chrome|android).)*safari/i.test(Yt())}function Gt(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&zt(t)&&(s=t.offsetWidth>0&&Xt(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&Xt(n.height)/t.offsetHeight||1);var r=(Ft(t)?Bt(t):window).visualViewport,a=!Ut()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function Jt(t){var e=Gt(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Zt(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&qt(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function te(t){return Bt(t).getComputedStyle(t)}function ee(t){return["table","td","th"].indexOf(Wt(t))>=0}function ie(t){return((Ft(t)?t.ownerDocument:t.document)||window.document).documentElement}function ne(t){return"html"===Wt(t)?t:t.assignedSlot||t.parentNode||(qt(t)?t.host:null)||ie(t)}function se(t){return zt(t)&&"fixed"!==te(t).position?t.offsetParent:null}function oe(t){for(var e=Bt(t),i=se(t);i&&ee(i)&&"static"===te(i).position;)i=se(i);return i&&("html"===Wt(i)||"body"===Wt(i)&&"static"===te(i).position)?e:i||function(t){var e=/firefox/i.test(Yt());if(/Trident/i.test(Yt())&&zt(t)&&"fixed"===te(t).position)return null;var i=ne(t);for(qt(i)&&(i=i.host);zt(i)&&["html","body"].indexOf(Wt(i))<0;){var n=te(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function re(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function ae(t,e,i){return Kt(t,Qt(e,i))}function le(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function ce(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const he={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=Vt(i.placement),l=re(a),c=[bt,_t].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return le("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:ce(t,yt))}(s.padding,i),d=Jt(o),u="y"===l?gt:bt,f="y"===l?mt:_t,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],g=r[l]-i.rects.reference[l],m=oe(o),_=m?"y"===l?m.clientHeight||0:m.clientWidth||0:0,b=p/2-g/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,A=ae(v,w,y),E=l;i.modifiersData[n]=((e={})[E]=A,e.centerOffset=A-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Zt(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function de(t){return t.split("-")[1]}var ue={top:"auto",right:"auto",bottom:"auto",left:"auto"};function fe(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=t.isFixed,u=r.x,f=void 0===u?0:u,p=r.y,g=void 0===p?0:p,m="function"==typeof h?h({x:f,y:g}):{x:f,y:g};f=m.x,g=m.y;var _=r.hasOwnProperty("x"),b=r.hasOwnProperty("y"),v=bt,y=gt,w=window;if(c){var A=oe(i),E="clientHeight",T="clientWidth";A===Bt(i)&&"static"!==te(A=ie(i)).position&&"absolute"===a&&(E="scrollHeight",T="scrollWidth"),(s===gt||(s===bt||s===_t)&&o===At)&&(y=mt,g-=(d&&A===w&&w.visualViewport?w.visualViewport.height:A[E])-n.height,g*=l?1:-1),s!==bt&&(s!==gt&&s!==mt||o!==At)||(v=_t,f-=(d&&A===w&&w.visualViewport?w.visualViewport.width:A[T])-n.width,f*=l?1:-1)}var C,O=Object.assign({position:a},c&&ue),x=!0===h?function(t){var e=t.x,i=t.y,n=window.devicePixelRatio||1;return{x:Xt(e*n)/n||0,y:Xt(i*n)/n||0}}({x:f,y:g}):{x:f,y:g};return f=x.x,g=x.y,l?Object.assign({},O,((C={})[y]=b?"0":"",C[v]=_?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+f+"px, "+g+"px)":"translate3d("+f+"px, "+g+"px, 0)",C)):Object.assign({},O,((e={})[y]=b?g+"px":"",e[v]=_?f+"px":"",e.transform="",e))}const pe={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:Vt(e.placement),variation:de(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,fe(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,fe(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var ge={passive:!0};const me={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=Bt(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,ge)})),a&&l.addEventListener("resize",i.update,ge),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,ge)})),a&&l.removeEventListener("resize",i.update,ge)}},data:{}};var _e={left:"right",right:"left",bottom:"top",top:"bottom"};function be(t){return t.replace(/left|right|bottom|top/g,(function(t){return _e[t]}))}var ve={start:"end",end:"start"};function ye(t){return t.replace(/start|end/g,(function(t){return ve[t]}))}function we(t){var e=Bt(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Ae(t){return Gt(ie(t)).left+we(t).scrollLeft}function Ee(t){var e=te(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Te(t){return["html","body","#document"].indexOf(Wt(t))>=0?t.ownerDocument.body:zt(t)&&Ee(t)?t:Te(ne(t))}function Ce(t,e){var i;void 0===e&&(e=[]);var n=Te(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=Bt(n),r=s?[o].concat(o.visualViewport||[],Ee(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Ce(ne(r)))}function Oe(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function xe(t,e,i){return e===Tt?Oe(function(t,e){var i=Bt(t),n=ie(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=Ut();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+Ae(t),y:l}}(t,i)):Ft(e)?function(t,e){var i=Gt(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):Oe(function(t){var e,i=ie(t),n=we(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=Kt(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=Kt(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+Ae(t),l=-n.scrollTop;return"rtl"===te(s||i).direction&&(a+=Kt(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(ie(t)))}function ke(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?Vt(s):null,r=s?de(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case gt:e={x:a,y:i.y-n.height};break;case mt:e={x:a,y:i.y+i.height};break;case _t:e={x:i.x+i.width,y:l};break;case bt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?re(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case wt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case At:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function Le(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.strategy,r=void 0===o?t.strategy:o,a=i.boundary,l=void 0===a?Et:a,c=i.rootBoundary,h=void 0===c?Tt:c,d=i.elementContext,u=void 0===d?Ct:d,f=i.altBoundary,p=void 0!==f&&f,g=i.padding,m=void 0===g?0:g,_=le("number"!=typeof m?m:ce(m,yt)),b=u===Ct?Ot:Ct,v=t.rects.popper,y=t.elements[p?b:u],w=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=Ce(ne(t)),i=["absolute","fixed"].indexOf(te(t).position)>=0&&zt(t)?oe(t):t;return Ft(i)?e.filter((function(t){return Ft(t)&&Zt(t,i)&&"body"!==Wt(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=xe(t,i,n);return e.top=Kt(s.top,e.top),e.right=Qt(s.right,e.right),e.bottom=Qt(s.bottom,e.bottom),e.left=Kt(s.left,e.left),e}),xe(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(Ft(y)?y:y.contextElement||ie(t.elements.popper),l,h,r),A=Gt(t.elements.reference),E=ke({reference:A,element:v,strategy:"absolute",placement:s}),T=Oe(Object.assign({},v,E)),C=u===Ct?T:A,O={top:w.top-C.top+_.top,bottom:C.bottom-w.bottom+_.bottom,left:w.left-C.left+_.left,right:C.right-w.right+_.right},x=t.modifiersData.offset;if(u===Ct&&x){var k=x[s];Object.keys(O).forEach((function(t){var e=[_t,mt].indexOf(t)>=0?1:-1,i=[gt,mt].indexOf(t)>=0?"y":"x";O[t]+=k[i]*e}))}return O}function De(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?kt:l,h=de(n),d=h?a?xt:xt.filter((function(t){return de(t)===h})):yt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=Le(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[Vt(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const Se={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,g=i.allowedAutoPlacements,m=e.options.placement,_=Vt(m),b=l||(_!==m&&p?function(t){if(Vt(t)===vt)return[];var e=be(t);return[ye(t),e,ye(e)]}(m):[be(m)]),v=[m].concat(b).reduce((function(t,i){return t.concat(Vt(i)===vt?De(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:g}):i)}),[]),y=e.rects.reference,w=e.rects.popper,A=new Map,E=!0,T=v[0],C=0;C=0,D=L?"width":"height",S=Le(e,{placement:O,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),I=L?k?_t:bt:k?mt:gt;y[D]>w[D]&&(I=be(I));var N=be(I),P=[];if(o&&P.push(S[x]<=0),a&&P.push(S[I]<=0,S[N]<=0),P.every((function(t){return t}))){T=O,E=!1;break}A.set(O,P)}if(E)for(var j=function(t){var e=v.find((function(e){var i=A.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==j(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function Ie(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function Ne(t){return[gt,_t,mt,bt].some((function(e){return t[e]>=0}))}const Pe={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=Le(e,{elementContext:"reference"}),a=Le(e,{altBoundary:!0}),l=Ie(r,n),c=Ie(a,s,o),h=Ne(l),d=Ne(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},je={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=kt.reduce((function(t,i){return t[i]=function(t,e,i){var n=Vt(t),s=[bt,gt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[bt,_t].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},Me={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=ke({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},He={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,g=void 0===p?0:p,m=Le(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=Vt(e.placement),b=de(e.placement),v=!b,y=re(_),w="x"===y?"y":"x",A=e.modifiersData.popperOffsets,E=e.rects.reference,T=e.rects.popper,C="function"==typeof g?g(Object.assign({},e.rects,{placement:e.placement})):g,O="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),x=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,k={x:0,y:0};if(A){if(o){var L,D="y"===y?gt:bt,S="y"===y?mt:_t,I="y"===y?"height":"width",N=A[y],P=N+m[D],j=N-m[S],M=f?-T[I]/2:0,H=b===wt?E[I]:T[I],$=b===wt?-T[I]:-E[I],W=e.elements.arrow,B=f&&W?Jt(W):{width:0,height:0},F=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=F[D],q=F[S],R=ae(0,E[I],B[I]),V=v?E[I]/2-M-R-z-O.mainAxis:H-R-z-O.mainAxis,K=v?-E[I]/2+M+R+q+O.mainAxis:$+R+q+O.mainAxis,Q=e.elements.arrow&&oe(e.elements.arrow),X=Q?"y"===y?Q.clientTop||0:Q.clientLeft||0:0,Y=null!=(L=null==x?void 0:x[y])?L:0,U=N+K-Y,G=ae(f?Qt(P,N+V-Y-X):P,N,f?Kt(j,U):j);A[y]=G,k[y]=G-N}if(a){var J,Z="x"===y?gt:bt,tt="x"===y?mt:_t,et=A[w],it="y"===w?"height":"width",nt=et+m[Z],st=et-m[tt],ot=-1!==[gt,bt].indexOf(_),rt=null!=(J=null==x?void 0:x[w])?J:0,at=ot?nt:et-E[it]-T[it]-rt+O.altAxis,lt=ot?et+E[it]+T[it]-rt-O.altAxis:st,ct=f&&ot?function(t,e,i){var n=ae(t,e,i);return n>i?i:n}(at,et,lt):ae(f?at:nt,et,f?lt:st);A[w]=ct,k[w]=ct-et}e.modifiersData[n]=k}},requiresIfExists:["offset"]};function $e(t,e,i){void 0===i&&(i=!1);var n,s,o=zt(e),r=zt(e)&&function(t){var e=t.getBoundingClientRect(),i=Xt(e.width)/t.offsetWidth||1,n=Xt(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=ie(e),l=Gt(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==Wt(e)||Ee(a))&&(c=(n=e)!==Bt(n)&&zt(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:we(n)),zt(e)?((h=Gt(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=Ae(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function We(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var Be={placement:"bottom",modifiers:[],strategy:"absolute"};function Fe(){for(var t=arguments.length,e=new Array(t),i=0;i Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(B.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,..."function"==typeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem({key:t,target:e}){const i=Q.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>a(t)));i.length&&b(i,e,t===Ye,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=hi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=Q.find(ti);for(const i of e){const e=hi.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Xe,Ye].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Ze)?this:Q.prev(this,Ze)[0]||Q.next(this,Ze)[0]||Q.findOne(Ze,t.delegateTarget.parentNode),o=hi.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}P.on(document,Ge,Ze,hi.dataApiKeydownHandler),P.on(document,Ge,ei,hi.dataApiKeydownHandler),P.on(document,Ue,hi.clearMenus),P.on(document,"keyup.bs.dropdown.data-api",hi.clearMenus),P.on(document,Ue,Ze,(function(t){t.preventDefault(),hi.getOrCreateInstance(this).toggle()})),g(hi);const di=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",ui=".sticky-top",fi="padding-right",pi="margin-right";class gi{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,fi,(e=>e+t)),this._setElementAttributes(di,fi,(e=>e+t)),this._setElementAttributes(ui,pi,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,fi),this._resetElementAttributes(di,fi),this._resetElementAttributes(ui,pi)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&B.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=B.getDataAttribute(t,e);null!==i?(B.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(o(t))e(t);else for(const i of Q.find(t,this._element))e(i)}}const mi="show",_i="mousedown.bs.backdrop",bi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},vi={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class yi extends F{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return bi}static get DefaultType(){return vi}static get NAME(){return"backdrop"}show(t){if(!this._config.isVisible)return void m(t);this._append();const e=this._getElement();this._config.isAnimated&&d(e),e.classList.add(mi),this._emulateAnimation((()=>{m(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(mi),this._emulateAnimation((()=>{this.dispose(),m(t)}))):m(t)}dispose(){this._isAppended&&(P.off(this._element,_i),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=r(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),P.on(t,_i,(()=>{m(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){_(t,this._getElement(),this._config.isAnimated)}}const wi=".bs.focustrap",Ai="backward",Ei={autofocus:!0,trapElement:null},Ti={autofocus:"boolean",trapElement:"element"};class Ci extends F{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return Ei}static get DefaultType(){return Ti}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),P.off(document,wi),P.on(document,"focusin.bs.focustrap",(t=>this._handleFocusin(t))),P.on(document,"keydown.tab.bs.focustrap",(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,P.off(document,wi))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=Q.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===Ai?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?Ai:"forward")}}const Oi="hidden.bs.modal",xi="show.bs.modal",ki="modal-open",Li="show",Di="modal-static",Si={backdrop:!0,focus:!0,keyboard:!0},Ii={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class Ni extends z{constructor(t,e){super(t,e),this._dialog=Q.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new gi,this._addEventListeners()}static get Default(){return Si}static get DefaultType(){return Ii}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||P.trigger(this._element,xi,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(ki),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(P.trigger(this._element,"hide.bs.modal").defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(Li),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){for(const t of[window,this._dialog])P.off(t,".bs.modal");this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new yi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Ci({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=Q.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),d(this._element),this._element.classList.add(Li),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,P.trigger(this._element,"shown.bs.modal",{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){P.on(this._element,"keydown.dismiss.bs.modal",(t=>{if("Escape"===t.key)return this._config.keyboard?(t.preventDefault(),void this.hide()):void this._triggerBackdropTransition()})),P.on(window,"resize.bs.modal",(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),P.on(this._element,"mousedown.dismiss.bs.modal",(t=>{P.one(this._element,"click.dismiss.bs.modal",(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(ki),this._resetAdjustments(),this._scrollBar.reset(),P.trigger(this._element,Oi)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(P.trigger(this._element,"hidePrevented.bs.modal").defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(Di)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(Di),this._queueCallback((()=>{this._element.classList.remove(Di),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=p()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=p()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=Ni.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}P.on(document,"click.bs.modal.data-api",'[data-bs-toggle="modal"]',(function(t){const e=n(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),P.one(e,xi,(t=>{t.defaultPrevented||P.one(e,Oi,(()=>{a(this)&&this.focus()}))}));const i=Q.findOne(".modal.show");i&&Ni.getInstance(i).hide(),Ni.getOrCreateInstance(e).toggle(this)})),q(Ni),g(Ni);const Pi="show",ji="showing",Mi="hiding",Hi=".offcanvas.show",$i="hidePrevented.bs.offcanvas",Wi="hidden.bs.offcanvas",Bi={backdrop:!0,keyboard:!0,scroll:!1},Fi={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class zi extends z{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Bi}static get DefaultType(){return Fi}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||P.trigger(this._element,"show.bs.offcanvas",{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new gi).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(ji),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Pi),this._element.classList.remove(ji),P.trigger(this._element,"shown.bs.offcanvas",{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(P.trigger(this._element,"hide.bs.offcanvas").defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(Mi),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(Pi,Mi),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new gi).reset(),P.trigger(this._element,Wi)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new yi({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():P.trigger(this._element,$i)}:null})}_initializeFocusTrap(){return new Ci({trapElement:this._element})}_addEventListeners(){P.on(this._element,"keydown.dismiss.bs.offcanvas",(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():P.trigger(this._element,$i))}))}static jQueryInterface(t){return this.each((function(){const e=zi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}P.on(document,"click.bs.offcanvas.data-api",'[data-bs-toggle="offcanvas"]',(function(t){const e=n(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this))return;P.one(e,Wi,(()=>{a(this)&&this.focus()}));const i=Q.findOne(Hi);i&&i!==e&&zi.getInstance(i).hide(),zi.getOrCreateInstance(e).toggle(this)})),P.on(window,"load.bs.offcanvas.data-api",(()=>{for(const t of Q.find(Hi))zi.getOrCreateInstance(t).show()})),P.on(window,"resize.bs.offcanvas",(()=>{for(const t of Q.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&zi.getOrCreateInstance(t).hide()})),q(zi),g(zi);const qi=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Ri=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,Vi=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,Ki=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!qi.has(i)||Boolean(Ri.test(t.nodeValue)||Vi.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Qi={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Xi={allowList:Qi,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:""},Yi={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Ui={entry:"(string|element|function|null)",selector:"(string|element)"};class Gi extends F{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Xi}static get DefaultType(){return Yi}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Ui)}_setContent(t,e,i){const n=Q.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?o(e)?this._putElementInTemplate(r(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Ki(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return"function"==typeof t?t(this):t}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Ji=new Set(["sanitize","allowList","sanitizeFn"]),Zi="fade",tn="show",en=".modal",nn="hide.bs.modal",sn="hover",on="focus",rn={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},an={allowList:Qi,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,0],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:' ',title:"",trigger:"hover focus"},ln={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class cn extends z{constructor(t,e){if(void 0===Ke)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return an}static get DefaultType(){return ln}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),P.off(this._element.closest(en),nn,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=P.trigger(this._element,this.constructor.eventName("show")),e=(c(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),P.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(tn),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))P.on(t,"mouseover",h);this._queueCallback((()=>{P.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!P.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(tn),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))P.off(t,"mouseover",h);this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),P.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(Zi,tn),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(Zi),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Gi({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(Zi)}_isShown(){return this.tip&&this.tip.classList.contains(tn)}_createPopper(t){const e="function"==typeof this._config.placement?this._config.placement.call(this,t,this._element):this._config.placement,i=rn[e.toUpperCase()];return Ve(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return"function"==typeof t?t.call(this._element):t}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,..."function"==typeof this._config.popperConfig?this._config.popperConfig(e):this._config.popperConfig}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)P.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===sn?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===sn?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");P.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?on:sn]=!0,e._enter()})),P.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?on:sn]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},P.on(this._element.closest(en),nn,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=B.getDataAttributes(this._element);for(const t of Object.keys(e))Ji.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const e in this._config)this.constructor.Default[e]!==this._config[e]&&(t[e]=this._config[e]);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=cn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}g(cn);const hn={...cn.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},dn={...cn.DefaultType,content:"(null|string|element|function)"};class un extends cn{static get Default(){return hn}static get DefaultType(){return dn}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=un.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}g(un);const fn="click.bs.scrollspy",pn="active",gn="[href]",mn={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},_n={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class bn extends z{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return mn}static get DefaultType(){return _n}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=r(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(P.off(this._config.target,fn),P.on(this._config.target,fn,gn,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=Q.find(gn,this._config.target);for(const e of t){if(!e.hash||l(e))continue;const t=Q.findOne(e.hash,this._element);a(t)&&(this._targetLinks.set(e.hash,e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(pn),this._activateParents(t),P.trigger(this._element,"activate.bs.scrollspy",{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))Q.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(pn);else for(const e of Q.parents(t,".nav, .list-group"))for(const t of Q.prev(e,".nav-link, .nav-item > .nav-link, .list-group-item"))t.classList.add(pn)}_clearActiveClass(t){t.classList.remove(pn);const e=Q.find("[href].active",t);for(const t of e)t.classList.remove(pn)}static jQueryInterface(t){return this.each((function(){const e=bn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}P.on(window,"load.bs.scrollspy.data-api",(()=>{for(const t of Q.find('[data-bs-spy="scroll"]'))bn.getOrCreateInstance(t)})),g(bn);const vn="ArrowLeft",yn="ArrowRight",wn="ArrowUp",An="ArrowDown",En="active",Tn="fade",Cn="show",On='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',xn=`.nav-link:not(.dropdown-toggle), .list-group-item:not(.dropdown-toggle), [role="tab"]:not(.dropdown-toggle), ${On}`;class kn extends z{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),P.on(this._element,"keydown.bs.tab",(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?P.trigger(e,"hide.bs.tab",{relatedTarget:t}):null;P.trigger(t,"show.bs.tab",{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(En),this._activate(n(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),P.trigger(t,"shown.bs.tab",{relatedTarget:e})):t.classList.add(Cn)}),t,t.classList.contains(Tn)))}_deactivate(t,e){t&&(t.classList.remove(En),t.blur(),this._deactivate(n(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),P.trigger(t,"hidden.bs.tab",{relatedTarget:e})):t.classList.remove(Cn)}),t,t.classList.contains(Tn)))}_keydown(t){if(![vn,yn,wn,An].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=[yn,An].includes(t.key),i=b(this._getChildren().filter((t=>!l(t))),t.target,e,!0);i&&(i.focus({preventScroll:!0}),kn.getOrCreateInstance(i).show())}_getChildren(){return Q.find(xn,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=n(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`#${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=Q.findOne(t,i);s&&s.classList.toggle(n,e)};n(".dropdown-toggle",En),n(".dropdown-menu",Cn),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(En)}_getInnerElement(t){return t.matches(xn)?t:Q.findOne(xn,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=kn.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}P.on(document,"click.bs.tab",On,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this)||kn.getOrCreateInstance(this).show()})),P.on(window,"load.bs.tab",(()=>{for(const t of Q.find('.active[data-bs-toggle="tab"], .active[data-bs-toggle="pill"], .active[data-bs-toggle="list"]'))kn.getOrCreateInstance(t)})),g(kn);const Ln="hide",Dn="show",Sn="showing",In={animation:"boolean",autohide:"boolean",delay:"number"},Nn={animation:!0,autohide:!0,delay:5e3};class Pn extends z{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return Nn}static get DefaultType(){return In}static get NAME(){return"toast"}show(){P.trigger(this._element,"show.bs.toast").defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(Ln),d(this._element),this._element.classList.add(Dn,Sn),this._queueCallback((()=>{this._element.classList.remove(Sn),P.trigger(this._element,"shown.bs.toast"),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(P.trigger(this._element,"hide.bs.toast").defaultPrevented||(this._element.classList.add(Sn),this._queueCallback((()=>{this._element.classList.add(Ln),this._element.classList.remove(Sn,Dn),P.trigger(this._element,"hidden.bs.toast")}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(Dn),super.dispose()}isShown(){return this._element.classList.contains(Dn)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){P.on(this._element,"mouseover.bs.toast",(t=>this._onInteraction(t,!0))),P.on(this._element,"mouseout.bs.toast",(t=>this._onInteraction(t,!1))),P.on(this._element,"focusin.bs.toast",(t=>this._onInteraction(t,!0))),P.on(this._element,"focusout.bs.toast",(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=Pn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return q(Pn),g(Pn),{Alert:R,Button:K,Carousel:at,Collapse:pt,Dropdown:hi,Modal:Ni,Offcanvas:zi,Popover:un,ScrollSpy:bn,Tab:kn,Toast:Pn,Tooltip:cn}})); \ No newline at end of file diff --git a/assets/magick-js.php b/assets/magick-js.php index 043a6356..1f8391b8 100644 --- a/assets/magick-js.php +++ b/assets/magick-js.php @@ -6,7 +6,6 @@ header('Expires: ' . gmdate('D, d M Y H:i:s',time()+604800) . ' GMT'); header("Content-type: text/javascript; charset=utf-8"); readfile('bootstrap.bundle.min.js'); - echo(PHP_EOL); readfile('cli-translate.min.js'); ob_end_flush(); ?> From c88ce16f6961c422c46d253d0c34f7b6e40154ea Mon Sep 17 00:00:00 2001 From: Ryan DowlingSokaDate: Thu, 2 Feb 2023 16:32:38 -0800 Subject: [PATCH 09/12] Revert porting.php capitalization error --- include/porting.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/porting.php b/include/porting.php index 4d389cb9..53c79d37 100644 --- a/include/porting.php +++ b/include/porting.php @@ -274,7 +274,7 @@ Deprecated Features Removed
All deprecated features from ImageMagick version 6 are removed in version 7. These include the Magick-config and Wand-config configuration utilities. Instead use:
-magickCore-config +MagickCore-config MagickWand-configThe FilterImage() method has been removed. Use ConvolveImage() instead.
From 43d98389583f17b481c40447aef77288543791fc Mon Sep 17 00:00:00 2001 From: Ryan DowlingSokaDate: Thu, 2 Feb 2023 16:33:58 -0800 Subject: [PATCH 10/12] Revert opencl.php capitalization error --- include/opencl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/opencl.php b/include/opencl.php index 63031db1..3817a7b5 100644 --- a/include/opencl.php +++ b/include/opencl.php @@ -34,7 +34,7 @@ function OpenCL Operation Notes
When some of the OpenCL accelerated operators are invoked for the first time and all the conditions above are met, ImageMagick conducts a series of tests to configure the OpenCL environment according to the system hardware; therefore, it is normal to experience a higher latency the first time you use an accelerated option. The OpenCL kernels are embedded inside ImageMagick in source format. During the initial setup, ImageMagick discovers all the available OpenCL devices and compiles the kernels for each of these targets. ImageMagick also runs several performance tests internally to determine the preferred device to use. The compiled kernel code and the performance test results are stored into the cache directory so that the data can be reused by subsequent invocations of the OpenCL path. By default, the OpenCL cached data is stored in $HOME/.cache/ImageMagick on Linux and on MacOSX or in %LOCALAPPDATA%\ImageMagick on Windows. To run these tests for the first time, use the command below:
-magick_OCL_DEVICE=true magick sample.jpg -blur 0x5 null:+MAGICK_OCL_DEVICE=true magick sample.jpg -blur 0x5 null:On Windows the MAGICK_OCL_DEVICE=true part should be removed and the command set MAGICK_OCL_DEVICE=true should be executed before executing the command above to enable OpenCL operations.
To change the cache directory, set the MAGICK_OPENCL_CACHE_DIR environment variable. ImageMagick is able to detect hardware changes, driver updates, and new kernel sources and re-run the setup and the calibration test. You can also force ImageMagick to re-run the process by removing the content from the cache directory.
In addition to the environment variables mentioned above, ImageMagick provides a set of APIs that allow developers to gain more fine-grained control of the OpenCL acceleration. For example, use the InitializeOpenCL() function to initialize the OpenCL environment:
From f8e88fd9a4cab6cd3889686df00b37258c45ffe9 Mon Sep 17 00:00:00 2001 From: Ryan DowlingSokaDate: Thu, 2 Feb 2023 16:35:20 -0800 Subject: [PATCH 11/12] remove obsolete cli-examples div import.php --- include/import.php | 1 - 1 file changed, 1 deletion(-) diff --git a/include/import.php b/include/import.php index 2fc7966c..ee8ae51d 100644 --- a/include/import.php +++ b/include/import.php @@ -1,5 +1,4 @@ -Screenshot Utility
Example Usage • Option Summary
From f372296dfde8e08baea6a4b09e54e5c774cdce6b Mon Sep 17 00:00:00 2001 From: Ryan DowlingSokaDate: Thu, 2 Feb 2023 16:36:32 -0800 Subject: [PATCH 12/12] remove obsolete cli-examples div defines.php --- include/defines.php | 1 - 1 file changed, 1 deletion(-) diff --git a/include/defines.php b/include/defines.php index 366fdb5a..1f368290 100644 --- a/include/defines.php +++ b/include/defines.php @@ -1,5 +1,4 @@ -The -define command-line option adds specific global settings generally used to control coders and image processing operations.