-
- Avalon
-
+
+ Avalon
+
-
-
+
+
+
+
+
\ No newline at end of file
diff --git a/pype/premiere/extensions/com.pype.avalon/js/CEPEngine_extensions.js b/pype/premiere/extensions/com.pype.avalon/js/CEPEngine_extensions.js
new file mode 100644
index 0000000000..7b1d8cfe90
--- /dev/null
+++ b/pype/premiere/extensions/com.pype.avalon/js/CEPEngine_extensions.js
@@ -0,0 +1,699 @@
+/**************************************************************************************************
+*
+* ADOBE SYSTEMS INCORPORATED
+* Copyright 2018 Adobe Systems Incorporated
+* All Rights Reserved.
+*
+* NOTICE: Adobe permits you to use, modify, and distribute this file in accordance with the
+* terms of the Adobe license agreement accompanying it. If you have received this file from a
+* source other than Adobe, then your use, modification, or distribution of it requires the prior
+* written permission of Adobe.
+*
+**************************************************************************************************/
+
+// This is the JavaScript code for bridging to native functionality
+// See CEPEngine_extensions.cpp for implementation of native methods.
+//
+// Note: So far all native file i/o functions are synchronous, and aynchronous file i/o is TBD.
+
+/** Version v9.0.0 */
+
+/*jslint vars: true, plusplus: true, devel: true, browser: true, nomen: true, indent: 4, forin: true, maxerr: 50, regexp: true */
+/*global define, native */
+
+var cep;
+if (!cep) {
+ cep = {};
+}
+if (!cep.fs) {
+ cep.fs = {};
+}
+if (!cep.process) {
+ cep.process = {};
+}
+if (!cep.encoding) {
+ cep.encoding = {};
+}
+if (!cep.util) {
+ cep.util = {};
+}
+(function () {
+ // Internal function to get the last error code.
+ native function GetLastError();
+ function getLastError() {
+ return GetLastError();
+ }
+
+ function getErrorResult(){
+ var result = {err: getLastError()};
+ return result;
+ }
+
+ // Error values. These MUST be in sync with the error values
+ // at the top of CEPEngine_extensions.cpp
+
+ /**
+ * @constant No error.
+ */
+ cep.fs.NO_ERROR = 0;
+
+ /**
+ * @constant Unknown error occurred.
+ */
+ cep.fs.ERR_UNKNOWN = 1;
+
+ /**
+ * @constant Invalid parameters passed to function.
+ */
+ cep.fs.ERR_INVALID_PARAMS = 2;
+
+ /**
+ * @constant File or directory was not found.
+ */
+ cep.fs.ERR_NOT_FOUND = 3;
+
+ /**
+ * @constant File or directory could not be read.
+ */
+ cep.fs.ERR_CANT_READ = 4;
+
+ /**
+ * @constant An unsupported encoding value was specified.
+ */
+ cep.fs.ERR_UNSUPPORTED_ENCODING = 5;
+
+ /**
+ * @constant File could not be written.
+ */
+ cep.fs.ERR_CANT_WRITE = 6;
+
+ /**
+ * @constant Target directory is out of space. File could not be written.
+ */
+ cep.fs.ERR_OUT_OF_SPACE = 7;
+
+ /**
+ * @constant Specified path does not point to a file.
+ */
+ cep.fs.ERR_NOT_FILE = 8;
+
+ /**
+ * @constant Specified path does not point to a directory.
+ */
+ cep.fs.ERR_NOT_DIRECTORY = 9;
+
+ /**
+ * @constant Specified file already exists.
+ */
+ cep.fs.ERR_FILE_EXISTS = 10;
+
+ /**
+ * @constant The maximum number of processes has been exceeded.
+ */
+ cep.process.ERR_EXCEED_MAX_NUM_PROCESS = 101;
+
+ /**
+ * @constant Invalid URL.
+ */
+ cep.util.ERR_INVALID_URL = 201;
+
+ /**
+ * @constant deprecated API.
+ */
+ cep.util.DEPRECATED_API = 202;
+
+ /**
+ * @constant UTF8 encoding type.
+ */
+ cep.encoding.UTF8 = "UTF-8";
+
+ /**
+ * @constant Base64 encoding type.
+ */
+ cep.encoding.Base64 = "Base64";
+
+ /**
+ * Displays the OS File Open dialog, allowing the user to select files or directories.
+ *
+ * @param allowMultipleSelection {boolean} When true, multiple files/folders can be selected.
+ * @param chooseDirectory {boolean} When true, only folders can be selected. When false, only
+ * files can be selected.
+ * @param title {string} Title of the open dialog.
+ * @param initialPath {string} Initial path to display in the dialog. Pass NULL or "" to
+ * display the last path chosen.
+ * @param fileTypes {Array.} The file extensions (without the dot) for the types
+ * of files that can be selected. Ignored when chooseDirectory=true.
+ *
+ * @return An object with these properties:
+ *
"data": An array of the full names of the selected files.
+ *
"err": The status of the operation, one of
+ * NO_ERROR
+ * ERR_INVALID_PARAMS
+ *
+ **/
+ native function ShowOpenDialog();
+ cep.fs.showOpenDialog = function (allowMultipleSelection, chooseDirectory, title, initialPath, fileTypes) {
+ var resultString = ShowOpenDialog(allowMultipleSelection, chooseDirectory,
+ title || 'Open', initialPath || '',
+ fileTypes ? fileTypes.join(' ') : '');
+
+ var result = {data: JSON.parse(resultString || '[]'), err: getLastError() };
+ return result;
+ };
+
+ /**
+ * Displays the OS File Open dialog, allowing the user to select files or directories.
+ *
+ * @param allowMultipleSelection {boolean} When true, multiple files/folders can be selected.
+ * @param chooseDirectory {boolean} When true, only folders can be selected. When false, only
+ * files can be selected.
+ * @param title {string} Title of the open dialog.
+ * @param initialPath {string} Initial path to display in the dialog. Pass NULL or "" to
+ * display the last path chosen.
+ * @param fileTypes {Array.} The file extensions (without the dot) for the types
+ * of files that can be selected. Ignored when chooseDirectory=true.
+ * @param friendlyFilePrefix {string} String to put in front of the extensions
+ * of files that can be selected. Ignored when chooseDirectory=true. (win only)
+ * For example:
+ * fileTypes = ["gif", "jpg", "jpeg", "png", "bmp", "webp", "svg"];
+ * friendlyFilePrefix = "Images (*.gif;*.jpg;*.jpeg;*.png;*.bmp;*.webp;*.svg)";
+ * @param prompt {string} String for OK button (mac only, default is "Open" on mac, "Open" or "Select Folder" on win).
+ *
+ * @return An object with these properties:
+ *
"data": An array of the full names of the selected files.
+ *
"err": The status of the operation, one of
+ * NO_ERROR
+ * ERR_INVALID_PARAMS
+ *
+ **/
+ native function ShowOpenDialogEx();
+ cep.fs.showOpenDialogEx = function (allowMultipleSelection, chooseDirectory, title, initialPath, fileTypes,
+ friendlyFilePrefix, prompt) {
+ var resultString = ShowOpenDialogEx(allowMultipleSelection, chooseDirectory,
+ title || 'Open', initialPath || '',
+ fileTypes ? fileTypes.join(' ') : '', friendlyFilePrefix || '',
+ prompt || '');
+
+ var result = {data: JSON.parse(resultString || '[]'), err: getLastError() };
+ return result;
+ };
+
+ /**
+ * Displays the OS File Save dialog, allowing the user to type in a file name.
+ *
+ * @param title {string} Title of the save dialog.
+ * @param initialPath {string} Initial path to display in the dialog. Pass NULL or "" to
+ * display the last path chosen.
+ * @param fileTypes {Array.} The file extensions (without the dot) for the types
+ * of files that can be selected.
+ * @param defaultName {string} String to start with for the file name.
+ * @param friendlyFilePrefix {string} String to put in front of the extensions of files that can be selected. (win only)
+ * For example:
+ * fileTypes = ["gif", "jpg", "jpeg", "png", "bmp", "webp", "svg"];
+ * friendlyFilePrefix = "Images (*.gif;*.jpg;*.jpeg;*.png;*.bmp;*.webp;*.svg)";
+ * @param prompt {string} String for Save button (mac only, default is "Save" on mac and win).
+ * @param nameFieldLabel {string} String displayed in front of the file name text field (mac only, "File name:" on win).
+ *
+ * @return An object with these properties:
+ *
"data": The file path selected to save at or "" if canceled
+ *
"err": The status of the operation, one of
+ * NO_ERROR
+ * ERR_INVALID_PARAMS
+ *
+ **/
+ native function ShowSaveDialogEx();
+ cep.fs.showSaveDialogEx = function (title, initialPath, fileTypes, defaultName, friendlyFilePrefix, prompt, nameFieldLabel) {
+ var resultString = ShowSaveDialogEx(title || '', initialPath || '',
+ fileTypes ? fileTypes.join(' ') : '', defaultName || '',
+ friendlyFilePrefix || '', prompt || '', nameFieldLabel || '');
+
+ var result = {data: resultString || '', err: getLastError() };
+ return result;
+ };
+
+ /**
+ * Reads the contents of a folder.
+ *
+ * @param path {string} The path of the folder to read.
+ *
+ * @return An object with these properties:
+ *
"data": An array of the names of the contained files (excluding '.' and '..'.
+ *
"err": The status of the operation, one of:
+ * NO_ERROR
+ * ERR_UNKNOWN
+ * ERR_INVALID_PARAMS
+ * ERR_NOT_FOUND
+ * ERR_CANT_READ
+ **/
+ native function ReadDir();
+ cep.fs.readdir = function (path) {
+ var resultString = ReadDir(path);
+ var result = {data: JSON.parse(resultString || '[]'), err: getLastError() };
+ return result;
+ };
+
+ /**
+ * Creates a new folder.
+ *
+ * @param path {string} The path of the folder to create.
+ *
+ * @return An object with this property:
+ *
"err": The status of the operation, one of:
+ * NO_ERROR
+ * ERR_UNKNOWN
+ * ERR_INVALID_PARAMS
+ **/
+ native function MakeDir();
+ cep.fs.makedir = function (path) {
+ MakeDir(path);
+ return getErrorResult();
+ };
+
+ /**
+ * Renames a file or folder.
+ *
+ * @param oldPath {string} The old name of the file or folder.
+ * @param newPath {string} The new name of the file or folder.
+ *
+ * @return An object with this property:
+ *
"err": The status of the operation, one of:
+ * NO_ERROR
+ * ERR_UNKNOWN
+ * ERR_INVALID_PARAMS
+ * ERR_NOT_FOUND
+ * ERR_FILE_EXISTS
+ **/
+ native function Rename();
+ cep.fs.rename = function(oldPath, newPath) {
+ Rename(oldPath, newPath);
+ return getErrorResult();
+ };
+
+ /**
+ * Reports whether an item is a file or folder.
+ *
+ * @param path {string} The path of the file or folder.
+ *
+ * @return An object with these properties:
+ *
"data": An object with properties
+ * isFile (boolean)
+ * isDirectory (boolean)
+ * mtime (modification DateTime)
+ *
"err": The status of the operation, one of
+ * NO_ERROR
+ * ERR_UNKNOWN
+ * ERR_INVALID_PARAMS
+ * ERR_NOT_FOUND
+ *
+ **/
+ native function IsDirectory();
+ native function GetFileModificationTime();
+ cep.fs.stat = function (path) {
+ var isDir = IsDirectory(path);
+ var modtime = GetFileModificationTime(path);
+ var result = {
+ data: {
+ isFile: function () {
+ return !isDir;
+ },
+ isDirectory: function () {
+ return isDir;
+ },
+ mtime: modtime
+ },
+ err: getLastError()
+ };
+
+ return result;
+ };
+
+ /**
+ * Reads the entire contents of a file.
+ *
+ * @param path {string} The path of the file to read.
+ * @param encoding {string} The encoding of the contents of file, one of
+ * UTF8 (the default) or Base64.
+ *
+ * @return An object with these properties:
+ *
"data": The file contents.
+ *
"err": The status of the operation, one of
+ * NO_ERROR
+ * ERR_UNKNOWN
+ * ERR_INVALID_PARAMS
+ * ERR_NOT_FOUND
+ * ERR_CANT_READ
+ * ERR_UNSUPPORTED_ENCODING
+ *
+ **/
+ native function ReadFile();
+ cep.fs.readFile = function (path, encoding) {
+ encoding = encoding ? encoding : cep.encoding.UTF8;
+ var contents = ReadFile(path, encoding);
+ var result = {data: contents, err: getLastError() };
+ return result;
+ };
+
+ /**
+ * Writes data to a file, replacing the file if it already exists.
+ *
+ * @param path {string} The path of the file to write.
+ * @param data {string} The data to write to the file.
+ * @param encoding {string} The encoding of the contents of file, one of
+ * UTF8 (the default) or Base64.
+ *
+ * @return An object with this property:
+ *
"err": The status of the operation, one of:
+ * NO_ERROR
+ * ERR_UNKNOWN
+ * ERR_INVALID_PARAMS
+ * ERR_UNSUPPORTED_ENCODING
+ * ERR_CANT_WRITE
+ * ERR_OUT_OF_SPACE
+ **/
+ native function WriteFile();
+ cep.fs.writeFile = function (path, data, encoding) {
+ encoding = encoding ? encoding : cep.encoding.UTF8;
+ WriteFile(path, data, encoding);
+ return getErrorResult();
+ };
+
+ /**
+ * Sets permissions for a file or folder.
+ *
+ * @param path {string} The path of the file or folder.
+ * @param mode {number} The permissions in numeric format (for example, 0777).
+ *
+ * @return An object with this property:
+ *
"err": The status of the operation, one of:
+ * NO_ERROR
+ * ERR_UNKNOWN
+ * ERR_INVALID_PARAMS
+ * ERR_CANT_WRITE
+ **/
+ native function SetPosixPermissions();
+ cep.fs.chmod = function (path, mode) {
+ SetPosixPermissions(path, mode);
+ return getErrorResult();
+ };
+
+ /**
+ * Deletes a file.
+ *
+ * @param path {string} The path of the file to delete.
+ *
+ * @return An object with this property:
+ *
"err": The status of the operation, one of:
+ * NO_ERROR
+ * ERR_UNKNOWN
+ * ERR_INVALID_PARAMS
+ * ERR_NOT_FOUND
+ * ERR_NOT_FILE
+ **/
+ native function DeleteFileOrDirectory();
+ native function IsDirectory();
+ cep.fs.deleteFile = function (path) {
+ if (IsDirectory(path)) {
+ var result = {err: cep.fs.ERR_NOT_FILE};
+ return result;
+ }
+ DeleteFileOrDirectory(path);
+ return getErrorResult();
+ };
+
+ /**
+ * Creates a process.
+ *
+ * @param arguments {list} The arguments to create process. The first one is the full path of the executable,
+ * followed by the arguments of the executable.
+ *
+ * @return An object with these properties:
+ *
"data": The pid of the process, or -1 on error.
+ *
"err": The status of the operation, one of
+ * NO_ERROR
+ * ERR_UNKNOWN
+ * ERR_INVALID_PARAMS
+ * ERR_EXCEED_MAX_NUM_PROCESS
+ * ERR_NOT_FOUND
+ * ERR_NOT_FILE
+ *
+ **/
+ native function CreateProcess();
+ cep.process.createProcess = function () {
+ var args = Array.prototype.slice.call(arguments);
+ var pid = CreateProcess(args);
+ var result = {data: pid, err: getLastError()};
+ return result;
+ };
+
+ /**
+ * Registers a standard-output handler for a process.
+ *
+ * @param pid {int} The pid of the process.
+ * @param callback {function} The handler function for the standard output callback.
+ *
+ * @return An object with this property:
+ *
"err": The status of the operation, one of:
+ * NO_ERROR
+ * ERR_UNKNOWN
+ * ERR_INVALID_PARAMS
+ * ERR_INVALID_PROCESS_ID
+ **/
+ native function SetupStdOutHandler();
+ cep.process.stdout = function (pid, callback) {
+ SetupStdOutHandler(pid, callback);
+ return getErrorResult();
+ };
+
+ /**
+ * Registers up a standard-error handler for a process.
+ *
+ * @param pid {int} The pid of the process.
+ * @param callback {function} The handler function for the standard error callback.
+ *
+ * @return An object with this property:
+ *
"err": The status of the operation, one of:
+ * NO_ERROR
+ * ERR_UNKNOWN
+ * ERR_INVALID_PARAMS
+ * ERR_INVALID_PROCESS_ID
+ **/
+ native function SetupStdErrHandler();
+ cep.process.stderr = function (pid, callback) {
+ SetupStdErrHandler(pid, callback);
+ return getErrorResult();
+ };
+
+ /**
+ * Writes data to the standard input of a process.
+ *
+ * @param pid {int} The pid of the process
+ * @param data {string} The data to write.
+ *
+ * @return An object with this property:
+ *
"err": The status of the operation, one of:
+ * NO_ERROR
+ * ERR_UNKNOWN
+ * ERR_INVALID_PARAMS
+ * ERR_INVALID_PROCESS_ID
+ **/
+ native function WriteStdIn();
+ cep.process.stdin = function (pid, data) {
+ WriteStdIn(pid, data);
+ return getErrorResult();
+ };
+
+ /**
+ * Retrieves the working directory of a process.
+ *
+ * @param pid {int} The pid of the process.
+ *
+ * @return An object with these properties:
+ *
"data": The path of the working directory.
+ *
"err": The status of the operation, one of
+ * NO_ERROR
+ * ERR_UNKNOWN
+ * ERR_INVALID_PARAMS
+ * ERR_INVALID_PROCESS_ID
+ **/
+ native function GetWorkingDirectory();
+ cep.process.getWorkingDirectory = function (pid) {
+ var wd = GetWorkingDirectory(pid);
+ var result = {data: wd, err: getLastError()};
+ return result;
+ };
+
+ /**
+ * Waits for a process to quit.
+ *
+ * @param pid {int} The pid of the process.
+ *
+ * @return An object with this property:
+ *
"err": The status of the operation, one of:
+ * NO_ERROR
+ * ERR_UNKNOWN
+ * ERR_INVALID_PARAMS
+ * ERR_INVALID_PROCESS_ID
+ **/
+ native function WaitFor();
+ cep.process.waitfor = function (pid) {
+ WaitFor(pid);
+ return getErrorResult();
+ };
+
+ /**
+ * Registers a handler for the onquit callback of a process.
+ *
+ * @param pid {int} The pid of the process.
+ * @param callback {function} The handler function.
+ *
+ * @return An object with this property:
+ *
"err": The status of the operation, one of:
+ * NO_ERROR
+ * ERR_UNKNOWN
+ * ERR_INVALID_PARAMS
+ * ERR_INVALID_PROCESS_ID
+ **/
+ native function OnQuit();
+ cep.process.onquit = function (pid, callback) {
+ OnQuit(pid, callback);
+ return getErrorResult();
+ };
+
+ /**
+ * Reports whether a process is currently running.
+ *
+ * @param pid {int} The pid of the process.
+ *
+ * @return An object with these properties:
+ *
"data": True if the process is running, false otherwise.
+ *
"err": The status of the operation, one of
+ * NO_ERROR
+ * ERR_UNKNOWN
+ * ERR_INVALID_PARAMS
+ * ERR_INVALID_PROCESS_ID
+ **/
+ native function IsRunning();
+ cep.process.isRunning = function (pid) {
+ var isRunning = IsRunning(pid);
+ var result = {data: isRunning, err: getLastError()};
+ return result;
+ };
+
+ /**
+ * Terminates a process.
+ *
+ * @param pid {int} The pid of the process
+ *
+ * @return An object with this property:
+ *
"err": The status of the operation, one of:
+ * NO_ERROR
+ * ERR_UNKNOWN
+ * ERR_INVALID_PARAMS
+ * ERR_INVALID_PROCESS_ID
+ **/
+ native function Terminate();
+ cep.process.terminate = function (pid) {
+ Terminate(pid);
+ return getErrorResult();
+ };
+
+ /**
+ * Encoding conversions.
+ *
+ */
+ cep.encoding.convertion =
+ {
+ utf8_to_b64: function(str) {
+ return window.btoa(unescape(encodeURIComponent(str)));
+ },
+
+ b64_to_utf8: function(base64str) {
+ // If a base64 string contains any whitespace character, DOM Exception 5 occurs during window.atob, please see
+ // http://stackoverflow.com/questions/14695988/dom-exception-5-invalid-character-error-on-valid-base64-image-string-in-javascri
+ base64str = base64str.replace(/\s/g, '');
+ return decodeURIComponent(escape(window.atob(base64str)));
+ },
+
+ binary_to_b64: function(binary) {
+ return window.btoa(binary);
+ },
+
+ b64_to_binary: function(base64str) {
+ return window.atob(base64str);
+ },
+
+ ascii_to_b64: function(ascii) {
+ return window.btoa(binary);
+ },
+
+ b64_to_ascii: function(base64str) {
+ return window.atob(base64str);
+ }
+ };
+
+ /**
+ * Opens a page in the default system browser.
+ *
+ * @param url {string} The URL of the page/file to open, or the email address.
+ * Must use HTTP/HTTPS/file/mailto. For example:
+ * "http://www.adobe.com"
+ * "https://github.com"
+ * "file:///C:/log.txt"
+ * "mailto:test@adobe.com"
+ *
+ * @return An object with this property:
+ *
"err": The status of the operation, one of:
+ * NO_ERROR
+ * ERR_UNKNOWN
+ * ERR_INVALID_PARAMS
+ **/
+ native function OpenURLInDefaultBrowser();
+ cep.util.openURLInDefaultBrowser = function (url) {
+ if (url && (url.indexOf("http://") === 0 ||
+ url.indexOf("https://") === 0 ||
+ url.indexOf("file://") === 0 ||
+ url.indexOf("mailto:") === 0)) {
+ OpenURLInDefaultBrowser(url);
+ return getErrorResult();
+ } else {
+ return { err : cep.util.ERR_INVALID_URL };
+ }
+ };
+
+ /**
+ * Registers a callback function for extension unload. If called more than once,
+ * the last callback that is successfully registered is used.
+ *
+ * @deprecated since version 6.0.0
+ *
+ * @param callback {function} The handler function.
+ *
+ * @return An object with this property:
+ *
"err": The status of the operation, one of:
+ * NO_ERROR
+ * ERR_INVALID_PARAMS
+ **/
+ native function RegisterExtensionUnloadCallback();
+ cep.util.registerExtensionUnloadCallback = function (callback) {
+ return { err : cep.util.DEPRECATED_API };
+ };
+
+ /**
+ * Stores the user's proxy credentials
+ *
+ * @param username {string} proxy username
+ * @param password {string} proxy password
+ *
+ * @return An object with this property:
+ *
"err": The status of the operation, one of
+ * NO_ERROR
+ * ERR_INVALID_PARAMS
+ *
+ **/
+ native function StoreProxyCredentials();
+ cep.util.storeProxyCredentials = function (username, password) {
+ StoreProxyCredentials(username, password);
+ return getErrorResult();
+ };
+
+})();
diff --git a/pype/premiere/extensions/com.pype.avalon/ppro/js/vendor/CSInterface-8.js b/pype/premiere/extensions/com.pype.avalon/js/CSInterface.js
similarity index 93%
rename from pype/premiere/extensions/com.pype.avalon/ppro/js/vendor/CSInterface-8.js
rename to pype/premiere/extensions/com.pype.avalon/js/CSInterface.js
index 4239391efd..8073e78fe8 100644
--- a/pype/premiere/extensions/com.pype.avalon/ppro/js/vendor/CSInterface-8.js
+++ b/pype/premiere/extensions/com.pype.avalon/js/CSInterface.js
@@ -11,7 +11,7 @@
*
**************************************************************************************************/
-/** CSInterface - v8.0.0 */
+/** CSInterface - v9.2.0 */
/**
* Stores constants for the window types supported by the CSXS infrastructure.
@@ -323,7 +323,7 @@ function UIColor(type, antialiasLevel, color)
* @param panelBackgroundColor The background color of the extension panel.
* @param appBarBackgroundColorSRGB The application bar background color, as sRGB.
* @param panelBackgroundColorSRGB The background color of the extension panel, as sRGB.
- * @param systemHighlightColor The highlight color of the extension panel, if provided by the host application. Otherwise, the operating-system highlight color.
+ * @param systemHighlightColor The highlight color of the extension panel, if provided by the host application. Otherwise, the operating-system highlight color.
*
* @return AppSkinInfo object.
*/
@@ -381,7 +381,7 @@ function HostCapabilities(EXTENDED_PANEL_MENU, EXTENDED_PANEL_ICONS, DELEGATE_AP
this.EXTENDED_PANEL_ICONS = EXTENDED_PANEL_ICONS;
this.DELEGATE_APE_ENGINE = DELEGATE_APE_ENGINE;
this.SUPPORT_HTML_EXTENSIONS = SUPPORT_HTML_EXTENSIONS;
- this.DISABLE_FLASH_EXTENSIONS = DISABLE_FLASH_EXTENSIONS; // Since 5.0.0
+ this.DISABLE_FLASH_EXTENSIONS = DISABLE_FLASH_EXTENSIONS; // Since 5.0.0
}
/**
@@ -410,16 +410,16 @@ function ApiVersion(major, minor, micro)
* Since 5.2.0
*
* @param menuItemLabel The menu item label.
- * @param enabled True if user wants to enable the menu item.
- * @param checked True if user wants to check the menu item.
+ * @param enabled True if user wants to enable the menu item.
+ * @param checked True if user wants to check the menu item.
*
* @return MenuItemStatus object.
*/
function MenuItemStatus(menuItemLabel, enabled, checked)
{
- this.menuItemLabel = menuItemLabel;
- this.enabled = enabled;
- this.checked = checked;
+ this.menuItemLabel = menuItemLabel;
+ this.enabled = enabled;
+ this.checked = checked;
}
/**
@@ -429,16 +429,16 @@ function MenuItemStatus(menuItemLabel, enabled, checked)
* Since 5.2.0
*
* @param menuItemID The menu item id.
- * @param enabled True if user wants to enable the menu item.
- * @param checked True if user wants to check the menu item.
+ * @param enabled True if user wants to enable the menu item.
+ * @param checked True if user wants to check the menu item.
*
* @return MenuItemStatus object.
*/
function ContextMenuItemStatus(menuItemID, enabled, checked)
{
- this.menuItemID = menuItemID;
- this.enabled = enabled;
- this.checked = checked;
+ this.menuItemID = menuItemID;
+ this.enabled = enabled;
+ this.checked = checked;
}
//------------------------------ CSInterface ----------------------------------
@@ -717,7 +717,7 @@ CSInterface.prototype.dumpInstallationInfo = function()
*
* @return A string containing the OS version, or "unknown Operation System".
* If user customizes the User Agent by setting CEF command parameter "--user-agent", only
- * "Mac OS X" or "Windows" will be returned.
+ * "Mac OS X" or "Windows" will be returned.
*/
CSInterface.prototype.getOSInformation = function()
{
@@ -768,14 +768,14 @@ CSInterface.prototype.getOSInformation = function()
}
else
{
- winBit = " 32-bit";
+ winBit = " 32-bit";
}
}
return winVersion + winBit;
}
else if ((navigator.platform == "MacIntel") || (navigator.platform == "Macintosh"))
- {
+ {
var result = "Mac OS X";
if (userAgent.indexOf("Mac OS X") > -1)
@@ -784,7 +784,7 @@ CSInterface.prototype.getOSInformation = function()
result = result.replace(/_/g, ".");
}
- return result;
+ return result;
}
return "Unknown Operation System";
@@ -828,7 +828,7 @@ CSInterface.prototype.getExtensionID = function()
};
/**
- * Retrieves the scale factor of screen.
+ * Retrieves the scale factor of screen.
* On Windows platform, the value of scale factor might be different from operating system's scale factor,
* since host application may use its self-defined scale factor.
*
@@ -846,6 +846,21 @@ CSInterface.prototype.getScaleFactor = function()
return window.__adobe_cep__.getScaleFactor();
};
+/**
+ * Retrieves the scale factor of Monitor.
+ *
+ * Since 8.5.0
+ *
+ * @return value >= 1.0f
+ * only available for windows machine
+ */
+ if(navigator.appVersion.toLowerCase().indexOf("windows") >= 0) {
+ CSInterface.prototype.getMonitorScaleFactor = function()
+ {
+ return window.__adobe_cep__.getMonitorScaleFactor();
+ };
+}
+
/**
* Set a handler to detect any changes of scale factor. This only works on Mac.
*
@@ -878,9 +893,9 @@ CSInterface.prototype.getCurrentApiVersion = function()
*
* Since 5.2.0
*
- * Register a callback function for "com.adobe.csxs.events.flyoutMenuClicked" to get notified when a
+ * Register a callback function for "com.adobe.csxs.events.flyoutMenuClicked" to get notified when a
* menu item is clicked.
- * The "data" attribute of event is an object which contains "menuId" and "menuName" attributes.
+ * The "data" attribute of event is an object which contains "menuId" and "menuName" attributes.
*
* Register callback functions for "com.adobe.csxs.events.flyoutMenuOpened" and "com.adobe.csxs.events.flyoutMenuClosed"
* respectively to get notified when flyout menu is opened or closed.
@@ -904,36 +919,36 @@ CSInterface.prototype.setPanelFlyoutMenu = function(menu)
{
if ("string" != typeof menu)
{
- return;
+ return;
}
- window.__adobe_cep__.invokeSync("setPanelFlyoutMenu", menu);
+ window.__adobe_cep__.invokeSync("setPanelFlyoutMenu", menu);
};
/**
* Updates a menu item in the extension window's flyout menu, by setting the enabled
* and selection status.
- *
+ *
* Since 5.2.0
*
- * @param menuItemLabel The menu item label.
- * @param enabled True to enable the item, false to disable it (gray it out).
- * @param checked True to select the item, false to deselect it.
+ * @param menuItemLabel The menu item label.
+ * @param enabled True to enable the item, false to disable it (gray it out).
+ * @param checked True to select the item, false to deselect it.
*
- * @return false when the host application does not support this functionality (HostCapabilities.EXTENDED_PANEL_MENU is false).
+ * @return false when the host application does not support this functionality (HostCapabilities.EXTENDED_PANEL_MENU is false).
* Fails silently if menu label is invalid.
*
* @see HostCapabilities.EXTENDED_PANEL_MENU
*/
CSInterface.prototype.updatePanelMenuItem = function(menuItemLabel, enabled, checked)
{
- var ret = false;
- if (this.getHostCapabilities().EXTENDED_PANEL_MENU)
- {
- var itemStatus = new MenuItemStatus(menuItemLabel, enabled, checked);
- ret = window.__adobe_cep__.invokeSync("updatePanelMenuItem", JSON.stringify(itemStatus));
- }
- return ret;
+ var ret = false;
+ if (this.getHostCapabilities().EXTENDED_PANEL_MENU)
+ {
+ var itemStatus = new MenuItemStatus(menuItemLabel, enabled, checked);
+ ret = window.__adobe_cep__.invokeSync("updatePanelMenuItem", JSON.stringify(itemStatus));
+ }
+ return ret;
};
@@ -946,8 +961,8 @@ CSInterface.prototype.updatePanelMenuItem = function(menuItemLabel, enabled, che
* - an item without menu ID or menu name is disabled and is not shown.
* - if the item name is "---" (three hyphens) then it is treated as a separator. The menu ID in this case will always be NULL.
* - Checkable attribute takes precedence over Checked attribute.
- * - a PNG icon. For optimal display results please supply a 16 x 16px icon as larger dimensions will increase the size of the menu item.
- The Chrome extension contextMenus API was taken as a reference.
+ * - a PNG icon. For optimal display results please supply a 16 x 16px icon as larger dimensions will increase the size of the menu item.
+ The Chrome extension contextMenus API was taken as a reference.
https://developer.chrome.com/extensions/contextMenus
* - the items with icons and checkable items cannot coexist on the same menu level. The former take precedences over the latter.
*
@@ -973,8 +988,8 @@ CSInterface.prototype.setContextMenu = function(menu, callback)
{
return;
}
-
- window.__adobe_cep__.invokeAsync("setContextMenu", menu, callback);
+
+ window.__adobe_cep__.invokeAsync("setContextMenu", menu, callback);
};
/**
@@ -986,7 +1001,7 @@ CSInterface.prototype.setContextMenu = function(menu, callback)
* - an item without menu ID or menu name is disabled and is not shown.
* - if the item label is "---" (three hyphens) then it is treated as a separator. The menu ID in this case will always be NULL.
* - Checkable attribute takes precedence over Checked attribute.
- * - a PNG icon. For optimal display results please supply a 16 x 16px icon as larger dimensions will increase the size of the menu item.
+ * - a PNG icon. For optimal display results please supply a 16 x 16px icon as larger dimensions will increase the size of the menu item.
The Chrome extension contextMenus API was taken as a reference.
* - the items with icons and checkable items cannot coexist on the same menu level. The former take precedences over the latter.
https://developer.chrome.com/extensions/contextMenus
@@ -996,7 +1011,7 @@ CSInterface.prototype.setContextMenu = function(menu, callback)
*
* @description An example menu JSON:
*
- * {
+ * {
* "menu": [
* {
* "id": "menuItemId1",
@@ -1050,43 +1065,43 @@ CSInterface.prototype.setContextMenuByJSON = function(menu, callback)
{
if ("string" != typeof menu)
{
- return;
+ return;
}
-
- window.__adobe_cep__.invokeAsync("setContextMenuByJSON", menu, callback);
+
+ window.__adobe_cep__.invokeAsync("setContextMenuByJSON", menu, callback);
};
/**
* Updates a context menu item by setting the enabled and selection status.
- *
+ *
* Since 5.2.0
*
- * @param menuItemID The menu item ID.
- * @param enabled True to enable the item, false to disable it (gray it out).
- * @param checked True to select the item, false to deselect it.
+ * @param menuItemID The menu item ID.
+ * @param enabled True to enable the item, false to disable it (gray it out).
+ * @param checked True to select the item, false to deselect it.
*/
CSInterface.prototype.updateContextMenuItem = function(menuItemID, enabled, checked)
{
- var itemStatus = new ContextMenuItemStatus(menuItemID, enabled, checked);
- ret = window.__adobe_cep__.invokeSync("updateContextMenuItem", JSON.stringify(itemStatus));
+ var itemStatus = new ContextMenuItemStatus(menuItemID, enabled, checked);
+ ret = window.__adobe_cep__.invokeSync("updateContextMenuItem", JSON.stringify(itemStatus));
};
/**
- * Get the visibility status of an extension window.
- *
+ * Get the visibility status of an extension window.
+ *
* Since 6.0.0
*
* @return true if the extension window is visible; false if the extension window is hidden.
*/
CSInterface.prototype.isWindowVisible = function()
{
- return window.__adobe_cep__.invokeSync("isWindowVisible", "");
+ return window.__adobe_cep__.invokeSync("isWindowVisible", "");
};
/**
* Resize extension's content to the specified dimensions.
* 1. Works with modal and modeless extensions in all Adobe products.
- * 2. Extension's manifest min/max size constraints apply and take precedence.
+ * 2. Extension's manifest min/max size constraints apply and take precedence.
* 3. For panel extensions
* 3.1 This works in all Adobe products except:
* * Premiere Pro
@@ -1107,10 +1122,10 @@ CSInterface.prototype.resizeContent = function(width, height)
};
/**
- * Register the invalid certificate callback for an extension.
+ * Register the invalid certificate callback for an extension.
* This callback will be triggered when the extension tries to access the web site that contains the invalid certificate on the main frame.
* But if the extension does not call this function and tries to access the web site containing the invalid certificate, a default error page will be shown.
- *
+ *
* Since 6.1.0
*
* @param callback the callback function
@@ -1123,7 +1138,7 @@ CSInterface.prototype.registerInvalidCertificateCallback = function(callback)
/**
* Register an interest in some key events to prevent them from being sent to the host application.
*
- * This function works with modeless extensions and panel extensions.
+ * This function works with modeless extensions and panel extensions.
* Generally all the key events will be sent to the host application for these two extensions if the current focused element
* is not text input or dropdown,
* If you want to intercept some key events and want them to be handled in the extension, please call this function
@@ -1167,7 +1182,7 @@ CSInterface.prototype.registerKeyEventsInterest = function(keyEventsInterest)
};
/**
- * Set the title of the extension window.
+ * Set the title of the extension window.
* This function works with modal and modeless extensions in all Adobe products, and panel extensions in Photoshop, InDesign, InCopy, Illustrator, Flash Pro and Dreamweaver.
*
* Since 6.1.0
@@ -1180,7 +1195,7 @@ CSInterface.prototype.setWindowTitle = function(title)
};
/**
- * Get the title of the extension window.
+ * Get the title of the extension window.
* This function works with modal and modeless extensions in all Adobe products, and panel extensions in Photoshop, InDesign, InCopy, Illustrator, Flash Pro and Dreamweaver.
*
* Since 6.1.0
diff --git a/pype/premiere/extensions/com.pype.avalon/js/Vulcan.js b/pype/premiere/extensions/com.pype.avalon/js/Vulcan.js
new file mode 100644
index 0000000000..941761eafa
--- /dev/null
+++ b/pype/premiere/extensions/com.pype.avalon/js/Vulcan.js
@@ -0,0 +1,459 @@
+/**************************************************************************************************
+*
+* ADOBE SYSTEMS INCORPORATED
+* Copyright 2018 Adobe Systems Incorporated
+* All Rights Reserved.
+*
+* NOTICE: Adobe permits you to use, modify, and distribute this file in accordance with the
+* terms of the Adobe license agreement accompanying it. If you have received this file from a
+* source other than Adobe, then your use, modification, or distribution of it requires the prior
+* written permission of Adobe.
+*
+**************************************************************************************************/
+
+/** Vulcan - v9.2.0 */
+
+/**
+ * @class Vulcan
+ *
+ * The singleton instance, VulcanInterface, provides an interface
+ * to the Vulcan. Allows you to launch CC applications
+ * and discover information about them.
+ */
+function Vulcan()
+{
+}
+
+/**
+ * Gets all available application specifiers on the local machine.
+ *
+ * @return The array of all available application specifiers.
+ */
+Vulcan.prototype.getTargetSpecifiers = function()
+{
+ var params = {};
+ return JSON.parse(window.__adobe_cep__.invokeSync("vulcanGetTargetSpecifiers", JSON.stringify(params)));
+};
+
+/**
+ * Launches a CC application on the local machine, if it is not already running.
+ *
+ * @param targetSpecifier The application specifier; for example "indesign".
+ *
+ * Note: In Windows 7 64-bit or Windows 8 64-bit system, some target applications (like Photoshop and Illustrator) have both 32-bit version
+ * and 64-bit version. Therefore, we need to specify the version by this parameter with "photoshop-70.032" or "photoshop-70.064". If you
+ * installed Photoshop 32-bit and 64-bit on one Windows 64-bit system and invoke this interface with parameter "photoshop-70.032", you may
+ * receive wrong result.
+ * The specifiers for Illustrator is "illustrator-17.032", "illustrator-17.064", "illustrator-17" and "illustrator".
+ *
+ * In other platforms there is no such issue, so we can use "photoshop" or "photoshop-70" as specifier.
+ * @param focus True to launch in foreground, or false to launch in the background.
+ * @param cmdLine Optional, command-line parameters to supply to the launch command.
+ * @return True if the app can be launched, false otherwise.
+ */
+Vulcan.prototype.launchApp = function(targetSpecifier, focus, cmdLine)
+{
+ if(!requiredParamsValid(targetSpecifier))
+ {
+ return false;
+ }
+
+ var params = {};
+ params.targetSpecifier = targetSpecifier;
+ params.focus = focus ? "true" : "false";
+ params.cmdLine = requiredParamsValid(cmdLine) ? cmdLine : "";
+
+ return JSON.parse(window.__adobe_cep__.invokeSync("vulcanLaunchApp", JSON.stringify(params))).result;
+};
+
+/**
+ * Checks whether a CC application is running on the local machine.
+ *
+ * @param targetSpecifier The application specifier; for example "indesign".
+ *
+ * Note: In Windows 7 64-bit or Windows 8 64-bit system, some target applications (like Photoshop and Illustrator) have both 32-bit version
+ * and 64-bit version. Therefore, we need to specify the version by this parameter with "photoshop-70.032" or "photoshop-70.064". If you
+ * installed Photoshop 32-bit and 64-bit on one Windows 64-bit system and invoke this interface with parameter "photoshop-70.032", you may
+ * receive wrong result.
+ * The specifiers for Illustrator is "illustrator-17.032", "illustrator-17.064", "illustrator-17" and "illustrator".
+ *
+ * In other platforms there is no such issue, so we can use "photoshop" or "photoshop-70" as specifier.
+ * @return True if the app is running, false otherwise.
+ */
+Vulcan.prototype.isAppRunning = function(targetSpecifier)
+{
+ if(!requiredParamsValid(targetSpecifier))
+ {
+ return false;
+ }
+
+ var params = {};
+ params.targetSpecifier = targetSpecifier;
+
+ return JSON.parse(window.__adobe_cep__.invokeSync("vulcanIsAppRunning", JSON.stringify(params))).result;
+};
+
+/**
+ * Checks whether a CC application is installed on the local machine.
+ *
+ * @param targetSpecifier The application specifier; for example "indesign".
+ *
+ * Note: In Windows 7 64-bit or Windows 8 64-bit system, some target applications (like Photoshop and Illustrator) have both 32-bit version
+ * and 64-bit version. Therefore, we need to specify the version by this parameter with "photoshop-70.032" or "photoshop-70.064". If you
+ * installed Photoshop 32-bit and 64-bit on one Windows 64-bit system and invoke this interface with parameter "photoshop-70.032", you may
+ * receive wrong result.
+ * The specifiers for Illustrator is "illustrator-17.032", "illustrator-17.064", "illustrator-17" and "illustrator".
+ *
+ * In other platforms there is no such issue, so we can use "photoshop" or "photoshop-70" as specifier.
+ * @return True if the app is installed, false otherwise.
+ */
+Vulcan.prototype.isAppInstalled = function(targetSpecifier)
+{
+ if(!requiredParamsValid(targetSpecifier))
+ {
+ return false;
+ }
+
+ var params = {};
+ params.targetSpecifier = targetSpecifier;
+
+ return JSON.parse(window.__adobe_cep__.invokeSync("vulcanIsAppInstalled", JSON.stringify(params))).result;
+};
+
+/**
+ * Retrieves the local install path of a CC application.
+ *
+ * @param targetSpecifier The application specifier; for example "indesign".
+ *
+ * Note: In Windows 7 64-bit or Windows 8 64-bit system, some target applications (like Photoshop and Illustrator) have both 32-bit version
+ * and 64-bit version. Therefore, we need to specify the version by this parameter with "photoshop-70.032" or "photoshop-70.064". If you
+ * installed Photoshop 32-bit and 64-bit on one Windows 64-bit system and invoke this interface with parameter "photoshop-70.032", you may
+ * receive wrong result.
+ * The specifiers for Illustrator is "illustrator-17.032", "illustrator-17.064", "illustrator-17" and "illustrator".
+ *
+ * In other platforms there is no such issue, so we can use "photoshop" or "photoshop-70" as specifier.
+ * @return The path string if the application is found, "" otherwise.
+ */
+Vulcan.prototype.getAppPath = function(targetSpecifier)
+{
+ if(!requiredParamsValid(targetSpecifier))
+ {
+ return "";
+ }
+
+ var params = {};
+ params.targetSpecifier = targetSpecifier;
+
+ return JSON.parse(window.__adobe_cep__.invokeSync("vulcanGetAppPath", JSON.stringify(params))).result;
+};
+
+/**
+ * Registers a message listener callback function for a Vulcan message.
+ *
+ * @param type The message type.
+ * @param callback The callback function that handles the message.
+ * Takes one argument, the message object.
+ * @param obj Optional, the object containing the callback method, if any.
+ * Default is null.
+ */
+Vulcan.prototype.addMessageListener = function(type, callback, obj)
+{
+ if(!requiredParamsValid(type, callback) || !strStartsWith(type, VulcanMessage.TYPE_PREFIX))
+ {
+ return;
+ }
+
+ var params = {};
+ params.type = type;
+
+ window.__adobe_cep__.invokeAsync("vulcanAddMessageListener", JSON.stringify(params), callback, obj);
+};
+
+/**
+ * Removes a registered message listener callback function for a Vulcan message.
+ *
+ * @param type The message type.
+ * @param callback The callback function that was registered.
+ * Takes one argument, the message object.
+ * @param obj Optional, the object containing the callback method, if any.
+ * Default is null.
+ */
+Vulcan.prototype.removeMessageListener = function(type, callback, obj)
+{
+ if(!requiredParamsValid(type, callback) || !strStartsWith(type, VulcanMessage.TYPE_PREFIX))
+ {
+ return;
+ }
+
+ var params = {};
+ params.type = type;
+
+ window.__adobe_cep__.invokeAsync("vulcanRemoveMessageListener", JSON.stringify(params), callback, obj);
+};
+
+/**
+ * Dispatches a Vulcan message.
+ *
+ * @param vulcanMessage The message object.
+ */
+Vulcan.prototype.dispatchMessage = function(vulcanMessage)
+{
+ if(!requiredParamsValid(vulcanMessage) || !strStartsWith(vulcanMessage.type, VulcanMessage.TYPE_PREFIX))
+ {
+ return;
+ }
+
+ var params = {};
+ var message = new VulcanMessage(vulcanMessage.type);
+ message.initialize(vulcanMessage);
+ params.vulcanMessage = message;
+
+ window.__adobe_cep__.invokeSync("vulcanDispatchMessage", JSON.stringify(params));
+};
+
+/**
+ * Retrieves the message payload of a Vulcan message for the registered message listener callback function.
+ *
+ * @param vulcanMessage The message object.
+ * @return A string containing the message payload.
+ */
+Vulcan.prototype.getPayload = function(vulcanMessage)
+{
+ if(!requiredParamsValid(vulcanMessage) || !strStartsWith(vulcanMessage.type, VulcanMessage.TYPE_PREFIX))
+ {
+ return null;
+ }
+
+ var message = new VulcanMessage(vulcanMessage.type);
+ message.initialize(vulcanMessage);
+ return message.getPayload();
+};
+
+/**
+ * Gets all available endpoints of the running Vulcan-enabled applications.
+ *
+ * Since 7.0.0
+ *
+ * @return The array of all available endpoints.
+ * An example endpoint string:
+ *
+ * PHXS
+ * 16.1.0
+ *
+ */
+Vulcan.prototype.getEndPoints = function()
+{
+ var params = {};
+ return JSON.parse(window.__adobe_cep__.invokeSync("vulcanGetEndPoints", JSON.stringify(params)));
+};
+
+/**
+ * Gets the endpoint for itself.
+ *
+ * Since 7.0.0
+ *
+ * @return The endpoint string for itself.
+ */
+Vulcan.prototype.getSelfEndPoint = function()
+{
+ var params = {};
+ return window.__adobe_cep__.invokeSync("vulcanGetSelfEndPoint", JSON.stringify(params));
+};
+
+/** Singleton instance of Vulcan **/
+var VulcanInterface = new Vulcan();
+
+//--------------------------------- Vulcan Message ------------------------------
+
+/**
+ * @class VulcanMessage
+ * Message type for sending messages between host applications.
+ * A message of this type can be sent to the designated destination
+ * when appId and appVersion are provided and valid. Otherwise,
+ * the message is broadcast to all running Vulcan-enabled applications.
+ *
+ * To send a message between extensions running within one
+ * application, use the CSEvent type in CSInterface.js.
+ *
+ * @param type The message type.
+ * @param appId The peer appId.
+ * @param appVersion The peer appVersion.
+ *
+ */
+function VulcanMessage(type, appId, appVersion)
+{
+ this.type = type;
+ this.scope = VulcanMessage.SCOPE_SUITE;
+ this.appId = requiredParamsValid(appId) ? appId : VulcanMessage.DEFAULT_APP_ID;
+ this.appVersion = requiredParamsValid(appVersion) ? appVersion : VulcanMessage.DEFAULT_APP_VERSION;
+ this.data = VulcanMessage.DEFAULT_DATA;
+}
+
+VulcanMessage.TYPE_PREFIX = "vulcan.SuiteMessage.";
+VulcanMessage.SCOPE_SUITE = "GLOBAL";
+VulcanMessage.DEFAULT_APP_ID = "UNKNOWN";
+VulcanMessage.DEFAULT_APP_VERSION = "UNKNOWN";
+VulcanMessage.DEFAULT_DATA = "";
+VulcanMessage.dataTemplate = "{0}";
+VulcanMessage.payloadTemplate = "{0}";
+
+/**
+ * Initializes this message instance.
+ *
+ * @param message A \c message instance to use for initialization.
+ */
+VulcanMessage.prototype.initialize = function(message)
+{
+ this.type = message.type;
+ this.scope = message.scope;
+ this.appId = message.appId;
+ this.appVersion = message.appVersion;
+ this.data = message.data;
+};
+
+/**
+ * Retrieves the message data.
+ *
+ * @return A data string in XML format.
+ */
+VulcanMessage.prototype.xmlData = function()
+{
+ if(this.data === undefined)
+ {
+ var str = "";
+ str = String.format(VulcanMessage.payloadTemplate, str);
+ this.data = String.format(VulcanMessage.dataTemplate, str);
+ }
+ return this.data;
+};
+
+/**
+ * Sets the message payload of this message.
+ *
+ * @param payload A string containing the message payload.
+ */
+VulcanMessage.prototype.setPayload = function(payload)
+{
+ var str = cep.encoding.convertion.utf8_to_b64(payload);
+ str = String.format(VulcanMessage.payloadTemplate, str);
+ this.data = String.format(VulcanMessage.dataTemplate, str);
+};
+
+/**
+ * Retrieves the message payload of this message.
+ *
+ * @return A string containing the message payload.
+ */
+VulcanMessage.prototype.getPayload = function()
+{
+ var str = GetValueByKey(this.data, "payload");
+ if(str !== null)
+ {
+ return cep.encoding.convertion.b64_to_utf8(str);
+ }
+ return null;
+};
+
+/**
+ * Converts the properties of this instance to a string.
+ *
+ * @return The string version of this instance.
+ */
+VulcanMessage.prototype.toString = function()
+{
+ var str = "type=" + this.type;
+ str += ", scope=" + this.scope;
+ str += ", appId=" + this.appId;
+ str += ", appVersion=" + this.appVersion;
+ str += ", data=" + this.xmlData();
+ return str;
+};
+
+//--------------------------------------- Util --------------------------------
+
+/**
+ * Formats a string based on a template.
+ *
+ * @param src The format template.
+ *
+ * @return The formatted string
+ */
+String.format = function(src)
+{
+ if (arguments.length === 0)
+ {
+ return null;
+ }
+
+ var args = Array.prototype.slice.call(arguments, 1);
+ return src.replace(/\{(\d+)\}/g, function(m, i){
+ return args[i];
+ });
+};
+
+/**
+ * Retrieves the content of an XML element.
+ *
+ * @param xmlStr The XML string.
+ * @param key The name of the tag.
+ *
+ * @return The content of the tag, or the empty string
+ * if such tag is not found or the tag has no content.
+ */
+function GetValueByKey(xmlStr, key)
+{
+ if(window.DOMParser)
+ {
+ var parser = new window.DOMParser();
+ try
+ {
+ var xmlDoc = parser.parseFromString(xmlStr, "text/xml");
+ var node = xmlDoc.getElementsByTagName(key)[0];
+ if(node && node.childNodes[0])
+ {
+ return node.childNodes[0].nodeValue;
+ }
+ }
+ catch(e)
+ {
+ //log the error
+ }
+ }
+ return "";
+}
+
+/**
+ * Reports whether required parameters are valid.
+ *
+ * @return True if all required parameters are valid,
+ * false if any of the required parameters are invalid.
+ */
+function requiredParamsValid()
+{
+ for(var i = 0; i < arguments.length; i++)
+ {
+ var argument = arguments[i];
+ if(argument === undefined || argument === null)
+ {
+ return false;
+ }
+ }
+ return true;
+}
+
+/**
+ * Reports whether a string has a given prefix.
+ *
+ * @param str The target string.
+ * @param prefix The specific prefix string.
+ *
+ * @return True if the string has the prefix, false if not.
+ */
+function strStartsWith(str, prefix)
+{
+ if(typeof str != "string")
+ {
+ return false;
+ }
+ return str.indexOf(prefix) === 0;
+}
diff --git a/pype/premiere/extensions/com.pype.avalon/jsx/PPRO/Premiere.jsx b/pype/premiere/extensions/com.pype.avalon/jsx/PPRO/Premiere.jsx
index 3318615a3b..5aba0b618b 100644
--- a/pype/premiere/extensions/com.pype.avalon/jsx/PPRO/Premiere.jsx
+++ b/pype/premiere/extensions/com.pype.avalon/jsx/PPRO/Premiere.jsx
@@ -2,7 +2,7 @@
* ADOBE CONFIDENTIAL
* ___________________
*
- * Copyright 2014 Adobe
+ * Copyright 2019 Adobe
* All Rights Reserved.
*
* NOTICE: Adobe permits you to use, modify, and distribute this file in
@@ -11,11 +11,62 @@
* then your use, modification, or distribution of it requires the prior
* written permission of Adobe.
**************************************************************************/
-#include "PPro_API_Constants.jsx"
+
+// time display types
+
+var TIMEDISPLAY_24Timecode = 100;
+var TIMEDISPLAY_25Timecode = 101;
+var TIMEDISPLAY_2997DropTimecode = 102;
+var TIMEDISPLAY_2997NonDropTimecode = 103;
+var TIMEDISPLAY_30Timecode = 104;
+var TIMEDISPLAY_50Timecode = 105;
+var TIMEDISPLAY_5994DropTimecode = 106;
+var TIMEDISPLAY_5994NonDropTimecode = 107;
+var TIMEDISPLAY_60Timecode = 108;
+var TIMEDISPLAY_Frames = 109;
+var TIMEDISPLAY_23976Timecode = 110;
+var TIMEDISPLAY_16mmFeetFrames = 111;
+var TIMEDISPLAY_35mmFeetFrames = 112;
+var TIMEDISPLAY_48Timecode = 113;
+var TIMEDISPLAY_AudioSamplesTimecode = 200;
+var TIMEDISPLAY_AudioMsTimecode = 201;
+
+// field type constants
+
+var FIELDTYPE_Progressive = 0;
+var FIELDTYPE_UpperFirst = 1;
+var FIELDTYPE_LowerFirst = 2;
+
+// audio channel types
+
+var AUDIOCHANNELTYPE_Mono = 0;
+var AUDIOCHANNELTYPE_Stereo = 1;
+var AUDIOCHANNELTYPE_51 = 2;
+var AUDIOCHANNELTYPE_Multichannel = 3;
+var AUDIOCHANNELTYPE_4Channel = 4;
+var AUDIOCHANNELTYPE_8Channel = 5;
+
+// vr projection type
+
+var VRPROJECTIONTYPE_None = 0;
+var VRPROJECTIONTYPE_Equirectangular = 1;
+
+// vr stereoscopic type
+
+var VRSTEREOSCOPICTYPE_Monoscopic = 0;
+var VRSTEREOSCOPICTYPE_OverUnder = 1;
+var VRSTEREOSCOPICTYPE_SideBySide = 2;
+
+// constants used when clearing cache
+
+var MediaType_VIDEO = '228CDA18-3625-4d2d-951E-348879E4ED93'; // Magical constants from Premiere Pro's internal automation.
+var MediaType_AUDIO = '80B8E3D5-6DCA-4195-AEFB-CB5F407AB009';
+var MediaType_ANY = 'FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF';
+
+var NOT_SET = '-400000';
$._PPP_ = {
-
- createDeepFolderStructure: function (foldersArray, maxDepth) {
+ createDeepFolderStructure: function(foldersArray, maxDepth) {
if (typeof foldersArray !== 'object' || foldersArray.length <= 0) {
throw new Error('No valid folders array was provided!');
}
@@ -23,11 +74,13 @@ $._PPP_ = {
// if the first folder already exists, throw error
for (var i = 0; i < app.project.rootItem.children.numItems; i++) {
var curChild = app.project.rootItem.children[i];
- if (curChild.type === ProjectItemType.BIN && curChild.name === foldersArray[0]) {
- throw new Error('Folder with name "' + curChild.name + '" already exists!');
+ var binVal = ProjectItemType.BIN;
+ if (curChild.type === binVal && curChild.name === foldersArray[0]) {
+ throw new Error(
+ 'Folder with name "' + curChild.name + '" already exists!'
+ );
}
}
-
// create the deep folder structure
var currentBin = app.project.rootItem.createBin(foldersArray[0]);
for (var m = 1; m < foldersArray.length && m < maxDepth; i++) {
@@ -35,22 +88,22 @@ $._PPP_ = {
}
},
- getVersionInfo: function () {
+ getVersionInfo: function() {
return 'PPro ' + app.version + 'x' + app.build;
},
- getUserName: function () {
+ getUserName: function() {
var homeDir = new File('~/');
var userName = homeDir.displayName;
homeDir.close();
return userName;
},
- keepPanelLoaded: function () {
- app.setExtensionPersistent("com.pype.RenameDialog", 0); // 0, while testing (to enable rapid reload); 1 for "Never unload me, even when not visible."
+ keepPanelLoaded: function() {
+ app.setExtensionPersistent('com.pype.avalon', 0); // 0, while testing (to enable rapid reload); 1 for 'Never unload me, even when not visible.'
},
- updateGrowingFile: function () {
+ updateAllGrowingFiles: function() {
var numItems = app.project.rootItem.children.numItems;
for (var i = 0; i < numItems; i++) {
var currentItem = app.project.rootItem.children[i];
@@ -60,85 +113,95 @@ $._PPP_ = {
}
},
- getSep: function () {
- if (Folder.fs == 'Macintosh') {
+ getSep: function() {
+ if (Folder.fs === 'Macintosh') {
return '/';
} else {
return '\\';
}
},
- saveProject: function () {
+ saveProject: function() {
app.project.save();
},
- exportCurrentFrameAsPNG: function () {
+ exportCurrentFrameAsPNG: function() {
app.enableQE();
var activeSequence = qe.project.getActiveSequence(); // note: make sure a sequence is active in PPro UI
if (activeSequence) {
- // Create a file name based on timecode of frame.
+ // Create a file name, based on timecode of frame.
var time = activeSequence.CTI.timecode; // CTI = Current Time Indicator.
- var removeThese = /:|;/ig; // Why? Because Windows chokes on colons.
- var time_nice = time.replace(removeThese, '_');
- var outputPath = new File("~/Desktop");
- var outputFileName = outputPath.fsName + $._PPP_.getSep() + time_nice + '___' + activeSequence.name;
- var expPNG = activeSequence.exportFramePNG(time, outputFileName);
+ var removeThese = /:|;/gi; // Why? Because Windows chokes on colons in file names.
+ time = time.replace(removeThese, '_');
+ var outputPath = new File('~/Desktop');
+ var outputFileName =
+ outputPath.fsName +
+ $._PPP_.getSep() +
+ time +
+ '___' +
+ activeSequence.name;
+ activeSequence.exportFramePNG(time, outputFileName);
} else {
- $._PPP_.updateEventPanel("No active sequence.");
+ $._PPP_.updateEventPanel('No active sequence.');
}
},
- renameFootage: function () {
+ renameProjectItem: function() {
var item = app.project.rootItem.children[0]; // assumes the zero-th item in the project is footage.
if (item) {
- item.name = item.name + ", updated by PProPanel.";
+ item.name = item.name + ', updated by PProPanel.';
} else {
- $._PPP_.updateEventPanel("No project items found.");
+ $._PPP_.updateEventPanel('No project items found.');
}
},
- getActiveSequenceName: function () {
+ getActiveSequenceName: function() {
if (app.project.activeSequence) {
return app.project.activeSequence.name;
} else {
- return "No active sequence.";
+ return 'No active sequence.';
}
},
- projectPanelSelectionChanged: function (projectItems, viewID) {
+ projectPanelSelectionChanged: function(eventObj) {
+ // Note: This message is also triggered when the user opens or creates a new project.
+ var message = '';
+ var projectItems = eventObj;
+ if (projectItems) {
+ if (projectItems.length) {
+ var remainingArgs = projectItems.length;
+ message = remainingArgs + ' items selected: ';
+ var view = eventObj.viewID;
- var remainingArgs = projectItems.length;
- var message = "";
-
- if (remainingArgs) {
- var message = remainingArgs + " items selected: ";
- var view = viewID;
-
- // Concatenate selected project item names, into message.
- for (var i = 0; i < projectItems.length; i++) {
- message += projectItems[i].name;
- remainingArgs--;
- if (remainingArgs > 1) {
- message += ', ';
- }
- if (remainingArgs === 1) {
- message += ", and ";
- }
- if (remainingArgs === 0) {
- message += ".";
+ for (var i = 0; i < projectItems.length; i++) {
+ // Concatenate selected project item names, into message.
+ message += projectItems[i].name;
+ remainingArgs--;
+ if (remainingArgs > 1) {
+ message += ', ';
+ }
+ if (remainingArgs === 1) {
+ message += ', and ';
+ }
+ if (remainingArgs === 0) {
+ message += '.';
+ }
}
+ } else {
+ message = 'No items selected.';
}
- } else {
- message = '0 items selected.';
}
- app.setSDKEventMessage(message, 'info');
+ $._PPP_.updateEventPanel(message);
},
- registerProjectPanelSelectionChangedFxn: function () {
- var success = app.bind("onSourceClipSelectedInProjectPanel", $._PPP_.projectPanelSelectionChanged);
+ registerProjectPanelSelectionChangedFxn: function() {
+ app.bind(
+ 'onSourceClipSelectedInProjectPanel',
+ $._PPP_.projectPanelSelectionChanged
+ );
},
- saveCurrentProjectLayout: function () {
+ saveCurrentProjectLayout: function() {
var currentProjPanelDisplay = app.project.getProjectPanelMetadata();
if (currentProjPanelDisplay) {
var outFileName = 'Previous_Project_Panel_Display_Settings.xml';
@@ -148,65 +211,67 @@ $._PPP_ = {
var completeOutputPath = projDir + $._PPP_.getSep() + outFileName;
var outFile = new File(completeOutputPath);
if (outFile) {
- outFile.encoding = "UTF8";
- outFile.open("w", "TEXT", "????");
+ outFile.encoding = 'UTF8';
+ outFile.open('w', 'TEXT', '????');
outFile.write(currentProjPanelDisplay);
- $._PPP_.updateEventPanel("Saved layout to next to the project.");
+ $._PPP_.updateEventPanel('Saved layout to next to the project.');
outFile.close();
}
actualProjectPath.close();
}
} else {
- $._PPP_.updateEventPanel("Could not retrieve current project layout.");
+ $._PPP_.updateEventPanel('Could not retrieve current project layout.');
}
},
- setProjectPanelMeta: function () {
- var filterString = "";
+ setProjectPanelMeta: function() {
+ var filterString = '';
if (Folder.fs === 'Windows') {
- filterString = "XML files:*.xml";
+ filterString = 'XML files:*.xml';
}
- var fileToOpen = File.openDialog("Choose Project panel layout to open.",
+ var fileToOpen = File.openDialog(
+ 'Choose Project panel layout to open.',
filterString,
- false);
+ false
+ );
if (fileToOpen) {
- if (fileToOpen.fsName.indexOf('.xml')) { // We should really be more careful, but hey, it says it's XML!
- fileToOpen.encoding = "UTF8";
- fileToOpen.open("r", "TEXT", "????");
+ if (fileToOpen.fsName.indexOf('.xml')) {
+ // We should really be more careful, but hey, it says it's XML!
+ fileToOpen.encoding = 'UTF8';
+ fileToOpen.open('r', 'TEXT', '????');
var fileContents = fileToOpen.read();
if (fileContents) {
- var setResult = app.project.setProjectPanelMetadata(fileContents);
- if (setResult) {
- $._PPP_.updateEventPanel("Could not update layout using " + fileToOpen.filename + ".");
- } else {
- $._PPP_.updateEventPanel("Updated layout from .xml file.");
- }
+ app.project.setProjectPanelMetadata(fileContents);
+ $._PPP_.updateEventPanel('Updated layout from .xml file.');
}
}
} else {
- $._PPP_.updateEventPanel("No valid layout file chosen.");
+ $._PPP_.updateEventPanel('No valid layout file chosen.');
}
},
- exportSequenceAsPrProj: function () {
+ exportSequenceAsPrProj: function() {
var activeSequence = app.project.activeSequence;
if (activeSequence) {
var startTimeOffset = activeSequence.zeroPoint;
var prProjExtension = '.prproj';
var outputName = activeSequence.name;
var outFolder = Folder.selectDialog();
-
if (outFolder) {
- var completeOutputPath = outFolder.fsName +
- $._PPP_.getSep() +
- outputName +
- prProjExtension;
+ var completeOutputPath =
+ outFolder.fsName + $._PPP_.getSep() + outputName + prProjExtension;
app.project.activeSequence.exportAsProject(completeOutputPath);
- $._PPP_.updateEventPanel("Exported " + app.project.activeSequence.name + " to " + completeOutputPath + ".");
+ $._PPP_.updateEventPanel(
+ 'Exported ' +
+ app.project.activeSequence.name +
+ ' to ' +
+ completeOutputPath +
+ '.'
+ );
} else {
- $._PPP_.updateEventPanel("Could not find or create output folder.");
+ $._PPP_.updateEventPanel('Could not find or create output folder.');
}
// Here's how to import N sequences from a project.
@@ -217,13 +282,12 @@ $._PPP_ = {
// seqIDsToBeImported[N] = IDN;
//
//app.project.importSequences(pathToPrProj, seqIDsToBeImported);
-
} else {
- $._PPP_.updateEventPanel("No active sequence.");
+ $._PPP_.updateEventPanel('No active sequence.');
}
},
- createSequenceMarkers: function () {
+ createSequenceMarkers: function() {
var activeSequence = app.project.activeSequence;
if (activeSequence) {
var markers = activeSequence.markers;
@@ -231,110 +295,168 @@ $._PPP_ = {
var numMarkers = markers.numMarkers;
if (numMarkers > 0) {
var marker_index = 1;
- for (var current_marker = markers.getFirstMarker(); current_marker !== undefined; current_marker = markers.getNextMarker(current_marker)) {
- if (current_marker.name !== "") {
- $._PPP_.updateEventPanel('Marker ' + marker_index + ' name = ' + current_marker.name + '.');
+ for (
+ var current_marker = markers.getFirstMarker();
+ current_marker !== undefined;
+ current_marker = markers.getNextMarker(current_marker)
+ ) {
+ if (current_marker.name !== '') {
+ $._PPP_.updateEventPanel(
+ 'Marker ' +
+ marker_index +
+ ' name = ' +
+ current_marker.name +
+ '.'
+ );
} else {
- $._PPP_.updateEventPanel('Marker ' + marker_index + ' has no name.');
+ $._PPP_.updateEventPanel(
+ 'Marker ' + marker_index + ' has no name.'
+ );
}
+ $._PPP_.updateEventPanel(
+ 'Marker ' + marker_index + ' GUID = ' + current_marker.guid + '.'
+ );
if (current_marker.end.seconds > 0) {
- $._PPP_.updateEventPanel('Marker ' + marker_index + ' duration = ' + (current_marker.end.seconds - current_marker.start.seconds) + ' seconds.');
+ $._PPP_.updateEventPanel(
+ 'Marker ' +
+ marker_index +
+ ' duration = ' +
+ (current_marker.end.seconds - current_marker.start.seconds) +
+ ' seconds.'
+ );
} else {
- $._PPP_.updateEventPanel('Marker ' + marker_index + ' has no duration.');
+ $._PPP_.updateEventPanel(
+ 'Marker ' + marker_index + ' has no duration.'
+ );
}
- $._PPP_.updateEventPanel('Marker ' + marker_index + ' starts at ' + current_marker.start.seconds + ' seconds.');
+ $._PPP_.updateEventPanel(
+ 'Marker ' +
+ marker_index +
+ ' starts at ' +
+ current_marker.start.seconds +
+ ' seconds.'
+ );
marker_index = marker_index + 1;
}
}
}
+ var tempTime = new Time(); // Until I update the TypeScript definition of Time objects, this'll do...
var newCommentMarker = markers.createMarker(12.345);
newCommentMarker.name = 'Marker created by PProPanel.';
- newCommentMarker.comments = 'Here are some comments, inserted by PProPanel.';
- newCommentMarker.end = 15.6789;
+ newCommentMarker.comments =
+ 'Here are some comments, inserted by PProPanel.';
+ tempTime.seconds = 15.6789;
+ newCommentMarker.end = tempTime;
var newWebMarker = markers.createMarker(14.345);
newWebMarker.name = 'Web marker created by PProPanel.';
newWebMarker.comments = 'Here are some comments, inserted by PProPanel.';
- newWebMarker.end = 17.6789;
- newWebMarker.setTypeAsWebLink("http://www.adobe.com", "frame target");
+ tempTime.seconds = 17.6789;
+ newWebMarker.end = tempTime;
+ newWebMarker.setTypeAsWebLink('http://www.adobe.com', 'frame target');
} else {
- $._PPP_.updateEventPanel("No active sequence.");
+ $._PPP_.updateEventPanel('No active sequence.');
}
},
- exportFCPXML: function () {
+ exportFCPXML: function() {
if (app.project.activeSequence) {
var projPath = new File(app.project.path);
var parentDir = projPath.parent;
var outputName = app.project.activeSequence.name;
var xmlExtension = '.xml';
- var outputPath = Folder.selectDialog("Choose the output directory");
+ var outputPath = Folder.selectDialog('Choose the output directory');
if (outputPath) {
- var completeOutputPath = outputPath.fsName + $._PPP_.getSep() + outputName + xmlExtension;
- app.project.activeSequence.exportAsFinalCutProXML(completeOutputPath, 1); // 1 == suppress UI
- var info = "Exported FCP XML for " +
+ var completeOutputPath =
+ outputPath.fsName + $._PPP_.getSep() + outputName + xmlExtension;
+ app.project.activeSequence.exportAsFinalCutProXML(
+ completeOutputPath,
+ 1
+ ); // 1 == suppress UI
+ var info =
+ 'Exported FCP XML for ' +
app.project.activeSequence.name +
- " to " +
+ ' to ' +
completeOutputPath +
- ".";
+ '.';
$._PPP_.updateEventPanel(info);
} else {
- $._PPP_.updateEventPanel("No output path chosen.");
+ $._PPP_.updateEventPanel('No output path chosen.');
}
} else {
- $._PPP_.updateEventPanel("No active sequence.");
+ $._PPP_.updateEventPanel('No active sequence.');
}
},
- openInSource: function () {
- var filterString = "";
+ openInSource: function() {
+ var filterString = '';
if (Folder.fs === 'Windows') {
- filterString = "All files:*.*";
+ filterString = 'All files:*.*';
}
- var fileToOpen = File.openDialog("Choose file to open.",
+ var fileToOpen = File.openDialog(
+ 'Choose file to open.',
filterString,
- false);
+ false
+ );
if (fileToOpen) {
app.sourceMonitor.openFilePath(fileToOpen.fsName);
app.sourceMonitor.play(1.73); // playback speed as float, 1.0 = normal speed forward
var position = app.sourceMonitor.getPosition(); // new in 13.0
- $._PPP_.updateEventPanel("Current Source monitor position: " + position.seconds + " seconds.");
+ $._PPP_.updateEventPanel(
+ 'Current Source monitor position: ' + position.seconds + ' seconds.'
+ );
+
+ /* Example code for controlling scrubbing in Source monitor.
+
+ app.enableQE();
+ qe.source.player.startScrubbing();
+ qe.source.player.scrubTo('00;00;00;11');
+ qe.source.player.endScrubbing();
+ qe.source.player.step();
+
+ qe.source.player.play(playbackSpeed) // playbackSpeed must be between -4.0 and 4.0
+
+ */
+
fileToOpen.close();
} else {
- $._PPP_.updateEventPanel("No file chosen.");
+ $._PPP_.updateEventPanel('No file chosen.');
}
},
- searchForBinWithName: function (nameToFind) {
+ searchForBinWithName: function(nameToFind) {
// deep-search a folder by name in project
- var deepSearchBin = function (inFolder) {
+ var deepSearchBin = function(inFolder) {
if (inFolder && inFolder.name === nameToFind && inFolder.type === 2) {
return inFolder;
} else {
for (var i = 0; i < inFolder.children.numItems; i++) {
if (inFolder.children[i] && inFolder.children[i].type === 2) {
var foundBin = deepSearchBin(inFolder.children[i]);
- if (foundBin) return foundBin;
+ if (foundBin) {
+ return foundBin;
+ }
}
}
}
- return undefined;
};
return deepSearchBin(app.project.rootItem);
},
- importFiles: function () {
- var filterString = "";
+ importFiles: function() {
+ var filterString = '';
if (Folder.fs === 'Windows') {
- filterString = "All files:*.*";
+ filterString = 'All files:*.*';
}
if (app.project) {
- var fileOrFilesToImport = File.openDialog("Choose files to import", // title
+ var fileOrFilesToImport = File.openDialog(
+ 'Choose files to import', // title
filterString, // filter available files?
- true); // allow multiple?
+ true
+ ); // allow multiple?
if (fileOrFilesToImport) {
// We have an array of File objects; importFiles() takes an array of paths.
var importThese = [];
@@ -342,131 +464,171 @@ $._PPP_ = {
for (var i = 0; i < fileOrFilesToImport.length; i++) {
importThese[i] = fileOrFilesToImport[i].fsName;
}
- app.project.importFiles(importThese,
- 1, // suppress warnings
+ app.project.importFiles(
+ importThese,
+ true, // suppress warnings
app.project.getInsertionBin(),
- 0); // import as numbered stills
+ false
+ ); // import as numbered stills
}
} else {
- $._PPP_.updateEventPanel("No files to import.");
+ $._PPP_.updateEventPanel('No files to import.');
}
}
},
- muteFun: function () {
+ muteFun: function() {
if (app.project.activeSequence) {
- for (var i = 0; i < app.project.activeSequence.audioTracks.numTracks; i++) {
+ for (
+ var i = 0;
+ i < app.project.activeSequence.audioTracks.numTracks;
+ i++
+ ) {
var currentTrack = app.project.activeSequence.audioTracks[i];
if (Math.random() > 0.5) {
- currentTrack.setMute(!(currentTrack.isMuted()));
+ var muteState = 0;
+ if (currentTrack.isMuted()) {
+ muteState = 1;
+ }
+ currentTrack.setMute(muteState);
+ var appendString = 'Muted by PProPanel!';
+ currentTrack.name = currentTrack.name + appendString;
}
}
} else {
- $._PPP_.updateEventPanel("No active sequence.");
+ $._PPP_.updateEventPanel('No active sequence.');
}
},
- disableImportWorkspaceWithProjects: function () {
+ disableImportWorkspaceWithProjects: function() {
var prefToModify = 'FE.Prefs.ImportWorkspace';
- var appProperties = app.properties;
+ var propertyExists = app.properties.doesPropertyExist(prefToModify);
+ var propertyIsReadOnly = app.properties.isPropertyReadOnly(prefToModify);
+ var propertyValue = app.properties.getProperty(prefToModify);
- if (appProperties) {
- var propertyExists = app.properties.doesPropertyExist(prefToModify);
- var propertyIsReadOnly = app.properties.isPropertyReadOnly(prefToModify);
- var propertyValue = app.properties.getProperty(prefToModify);
-
- appProperties.setProperty(prefToModify, false, 1); // optional 3rd param : 0 = non-persistent, 1 = persistent (default)
- var safetyCheck = app.properties.getProperty(prefToModify);
- if (safetyCheck != propertyValue) {
- $._PPP_.updateEventPanel("Changed \'Import Workspaces with Projects\' from " + propertyValue + " to " + safetyCheck + ".");
- }
- } else {
- $._PPP_.updateEventPanel("Properties not found.");
+ app.properties.setProperty(prefToModify, '0', 1, false);
+ var safetyCheck = app.properties.getProperty(prefToModify);
+ if (safetyCheck != propertyValue) {
+ $._PPP_.updateEventPanel(
+ 'Changed "Import Workspaces with Projects" from ' +
+ propertyValue +
+ ' to ' +
+ safetyCheck +
+ '.'
+ );
}
},
- turnOffStartDialog: function () {
+ setWorkspace: function() {
+ var desiredWSName = prompt(
+ 'Which workspace would you like?',
+ 'Editing',
+ 'Which workspace?'
+ );
+ var workspaces = app.getWorkspaces();
+ var foundIt = false;
+ if (workspaces) {
+ $._PPP_.updateEventPanel(workspaces.length + ' workspaces found.');
+ for (var i = 0; i < workspaces.length && foundIt === false; i++) {
+ var currentWS = workspaces[i];
+ if (currentWS === desiredWSName) {
+ app.setWorkspace(currentWS);
+ foundIt = true;
+ $._PPP_.updateEventPanel('Workspace set to ' + currentWS + '.');
+ }
+ }
+ if (foundIt === false) {
+ $._PPP_.updateEventPanel(
+ 'Workspace named ' + desiredWSName + ' was not found.'
+ );
+ }
+ }
+ },
+
+ turnOffStartDialog: function() {
var prefToModify = 'MZ.Prefs.ShowQuickstartDialog';
- var appProperties = app.properties;
- if (appProperties) {
- var propertyExists = app.properties.doesPropertyExist(prefToModify);
- var propertyIsReadOnly = app.properties.isPropertyReadOnly(prefToModify);
- var originalValue = app.properties.getProperty(prefToModify);
+ var propertyExists = app.properties.doesPropertyExist(prefToModify);
+ var propertyIsReadOnly = app.properties.isPropertyReadOnly(prefToModify);
+ var originalValue = app.properties.getProperty(prefToModify);
- appProperties.setProperty(prefToModify, false, 1, 1); // optional 4th param : 0 = non-persistent, 1 = persistent (default)
- var safetyCheck = app.properties.getProperty(prefToModify);
- if (safetyCheck != originalValue) {
- $._PPP_.updateEventPanel("Start dialog now OFF. Enjoy!");
- } else {
- $._PPP_.updateEventPanel("Start dialog was already OFF.");
- }
+ app.properties.setProperty(prefToModify, '0', 1, true); // optional 4th param : 0 = non-persistent, 1 = persistent (default)
+ var safetyCheck = app.properties.getProperty(prefToModify);
+ if (safetyCheck != originalValue) {
+ $._PPP_.updateEventPanel('Start dialog now OFF. Enjoy!');
} else {
- $._PPP_.updateEventPanel("Properties not found.");
+ $._PPP_.updateEventPanel('Start dialog was already OFF.');
}
},
- replaceMedia: function () {
-
- // Note: This method of changing paths for projectItems is from the time
- // before PPro supported full-res AND proxy paths for each projectItem.
- // This can still be used, and will change the hi-res projectItem path, but
- // if your panel supports proxy workflows, it should rely instead upon
- // projectItem.setProxyPath() instead.
+ replaceMedia: function() {
+ // Note: This method of changing paths for projectItems is from the time
+ // before PPro supported full-res AND proxy paths for each projectItem.
+ // This can still be used, and will change the hi-res projectItem path, but
+ // if your panel supports proxy workflows, it should rely instead upon
+ // projectItem.setProxyPath() instead.
var firstProjectItem = app.project.rootItem.children[0];
if (firstProjectItem) {
if (firstProjectItem.canChangeMediaPath()) {
+ // NEW in 9.0: setScaleToFrameSize() ensures that for all clips created from this footage,
+ // auto scale to frame size will be ON, regardless of the current user preference.
+ // This is important for proxy workflows, to avoid mis-scaling upon replacement.
- // NEW in 9.0: setScaleToFrameSize() ensures that for all clips created from this footage,
- // auto scale to frame size will be ON, regardless of the current user preference.
- // This is important for proxy workflows, to avoid mis-scaling upon replacement.
-
- // Addendum: This setting will be in effect the NEXT time the projectItem is added to a
- // sequence; it will not affect or reinterpret clips from this projectItem, already in
- // sequences.
+ // Addendum: This setting will be in effect the NEXT time the projectItem is added to a
+ // sequence; it will not affect or reinterpret clips from this projectItem, already in
+ // sequences.
firstProjectItem.setScaleToFrameSize();
- var filterString = "";
+ var filterString = '';
if (Folder.fs === 'Windows') {
- filterString = "All files:*.*";
+ filterString = 'All files:*.*';
}
- var replacementMedia = File.openDialog("Choose new media file, for " +
- firstProjectItem.name,
+ var replacementMedia = File.openDialog(
+ 'Choose new media file, for ' + firstProjectItem.name,
filterString, // file filter
- false); // allow multiple?
+ false
+ ); // allow multiple?
if (replacementMedia) {
var suppressWarnings = true;
- firstProjectItem.name = replacementMedia.name + ", formerly known as " + firstProjectItem.name;
- firstProjectItem.changeMediaPath(replacementMedia.fsName, suppressWarnings); // new in 12.1
+ firstProjectItem.name =
+ replacementMedia.name +
+ ', formerly known as ' +
+ firstProjectItem.name;
+ firstProjectItem.changeMediaPath(
+ replacementMedia.fsName,
+ suppressWarnings
+ ); // new in 12.1
replacementMedia.close();
}
} else {
- $._PPP_.updateEventPanel("Couldn't change path of " + firstProjectItem.name + ".");
+ $._PPP_.updateEventPanel(
+ 'Couldn\'t change path of ' + firstProjectItem.name + '.'
+ );
}
} else {
- $._PPP_.updateEventPanel("No project items found.");
+ $._PPP_.updateEventPanel('No project items found.');
}
},
- openProject: function () {
- var filterString = "";
+ openProject: function() {
+ var filterString = '';
if (Folder.fs === 'Windows') {
- filterString = "Premiere Pro project files:*.prproj";
+ filterString = 'Premiere Pro project files:*.prproj';
}
- var projToOpen = File.openDialog("Choose project:",
- filterString,
- false);
- if ((projToOpen) && projToOpen.exists) {
- app.openDocument(projToOpen.fsName,
- 1, // suppress 'Convert Project' dialogs?
- 1, // suppress 'Locate Files' dialogs?
- 1); // suppress warning dialogs?
+ var projToOpen = File.openDialog('Choose project:', filterString, false);
+ if (projToOpen && projToOpen.exists) {
+ app.openDocument(
+ projToOpen.fsName,
+ true, // suppress 'Convert Project' dialogs?
+ true, // suppress 'Locate Files' dialogs?
+ true
+ ); // suppress warning dialogs?
projToOpen.close();
}
},
- exportFramesForMarkers: function () {
+ exportFramesForMarkers: function() {
app.enableQE();
var activeSequence = app.project.activeSequence;
if (activeSequence) {
@@ -477,8 +639,9 @@ $._PPP_ = {
activeSequence.setPlayerPosition(firstMarker.start.ticks);
$._PPP_.exportCurrentFrameAsPNG();
- var previousMarker = 0;
+ var previousMarker;
if (firstMarker) {
+ var currentMarker;
for (var i = 0; i < markerCount; i++) {
if (i === 0) {
currentMarker = markers.getNextMarker(firstMarker);
@@ -493,28 +656,38 @@ $._PPP_ = {
}
}
} else {
- $._PPP_.updateEventPanel("No markers applied to " + activeSequence.name + ".");
+ $._PPP_.updateEventPanel(
+ 'No markers applied to ' + activeSequence.name + '.'
+ );
}
} else {
- $._PPP_.updateEventPanel("No active sequence.");
+ $._PPP_.updateEventPanel('No active sequence.');
}
},
- createSequence: function (name) {
- var someID = "xyz123";
- var seqName = prompt('Name of sequence?', '<<>>', 'Sequence Naming Prompt');
+ createSequence: function(name) {
+ var someID = 'xyz123';
+ var seqName = prompt(
+ 'Name of sequence?',
+ '<<>>',
+ 'Sequence Naming Prompt'
+ );
app.project.createNewSequence(seqName, someID);
},
- createSequenceFromPreset: function (presetPath) {
+ createSequenceFromPreset: function(presetPath) {
app.enableQE();
- var seqName = prompt('Name of sequence?', '<<>>', 'Sequence Naming Prompt');
+ var seqName = prompt(
+ 'Name of sequence?',
+ '<<>>',
+ 'Sequence Naming Prompt'
+ );
if (seqName) {
qe.project.newSequence(seqName, presetPath);
}
},
- transcode: function (outputPresetPath) {
+ transcode: function(outputPresetPath) {
app.encoder.bind('onEncoderJobComplete', $._PPP_.onEncoderJobComplete);
app.encoder.bind('onEncoderJobError', $._PPP_.onEncoderJobError);
app.encoder.bind('onEncoderJobProgress', $._PPP_.onEncoderJobProgress);
@@ -526,158 +699,192 @@ $._PPP_ = {
if (projRoot.numItems) {
var firstProjectItem = app.project.rootItem.children[0];
if (firstProjectItem) {
-
app.encoder.launchEncoder(); // This can take a while; let's get the ball rolling.
- var fileOutputPath = Folder.selectDialog("Choose the output directory");
+ var fileOutputPath = Folder.selectDialog('Choose the output directory');
if (fileOutputPath) {
- var outputName = firstProjectItem.name.search('[.]');
+ var regExp = new RegExp('[.]');
+ var outputName = firstProjectItem.name.search(regExp);
if (outputName == -1) {
outputName = firstProjectItem.name.length;
}
- outFileName = firstProjectItem.name.substr(0, outputName);
+ var outFileName = firstProjectItem.name.substr(0, outputName);
outFileName = outFileName.replace('/', '-');
- var completeOutputPath = fileOutputPath.fsName + $._PPP_.getSep() + outFileName + '.mxf';
- var removeFromQueue = true;
+ var completeOutputPath =
+ fileOutputPath.fsName + $._PPP_.getSep() + outFileName + '.mxf';
+ var removeFromQueue = 1;
var rangeToEncode = app.encoder.ENCODE_IN_TO_OUT;
- app.encoder.encodeProjectItem(firstProjectItem,
+ app.encoder.encodeProjectItem(
+ firstProjectItem,
completeOutputPath,
outputPresetPath,
rangeToEncode,
- removeFromQueue);
+ removeFromQueue
+ );
app.encoder.startBatch();
}
} else {
- $._PPP_.updateEventPanel("No project items found.");
+ $._PPP_.updateEventPanel('No project items found.');
}
} else {
- $._PPP_.updateEventPanel("Project is empty.");
+ $._PPP_.updateEventPanel('Project is empty.');
}
},
- transcodeExternal: function (outputPresetPath) {
+ transcodeExternal: function(outputPresetPath) {
app.encoder.launchEncoder();
- var filterString = "";
+ var filterString = '';
if (Folder.fs === 'Windows') {
- filterString = "All files:*.*";
+ filterString = 'All files:*.*';
}
- var fileToTranscode = File.openDialog("Choose file to open.",
+ var fileToTranscode = File.openDialog(
+ 'Choose file to open.',
filterString,
- false);
+ false
+ );
if (fileToTranscode) {
- var fileOutputPath = Folder.selectDialog("Choose the output directory");
+ var fileOutputPath = Folder.selectDialog('Choose the output directory');
if (fileOutputPath) {
+ var srcInPoint = new Time();
+ srcInPoint.seconds = 1.0; // encode start time at 1s (optional--if omitted, encode entire file)
+ var srcOutPoint = new Time();
+ srcOutPoint.seconds = 3.0; // encode stop time at 3s (optional--if omitted, encode entire file)
+ var removeFromQueue = 0;
- var srcInPoint = 1.0; // encode start time at 1s (optional--if omitted, encode entire file)
- var srcOutPoint = 3.0; // encode stop time at 3s (optional--if omitted, encode entire file)
- var removeFromQueue = false;
-
- var result = app.encoder.encodeFile(fileToTranscode.fsName,
+ var result = app.encoder.encodeFile(
+ fileToTranscode.fsName,
fileOutputPath.fsName,
outputPresetPath,
removeFromQueue,
srcInPoint,
- srcOutPoint);
+ srcOutPoint
+ );
}
}
},
- render: function (outputPresetPath) {
+ render: function(outputPresetPath) {
app.enableQE();
var activeSequence = qe.project.getActiveSequence(); // we use a QE DOM function, to determine the output extension.
if (activeSequence) {
- app.encoder.launchEncoder(); // This can take a while; let's get the ball rolling.
+ var ameInstalled = false;
+ var ameStatus = BridgeTalk.getStatus('ame');
+ if (ameStatus == 'ISNOTINSTALLED') {
+ $._PPP_.updateEventPanel('AME is not installed.');
+ } else if (ameInstalled) {
+ if (ameStatus == 'ISNOTRUNNING') {
+ app.encoder.launchEncoder(); // This can take a while; let's get the ball rolling.
+ }
+ var timeSecs = activeSequence.CTI.secs; // Just for reference, here's how to access the CTI
+ var timeFrames = activeSequence.CTI.frames; // (Current Time Indicator), for the active sequence.
+ var timeTicks = activeSequence.CTI.ticks;
+ var timeString = activeSequence.CTI.timecode;
- var timeSecs = activeSequence.CTI.secs; // Just for reference, here's how to access the CTI
- var timeFrames = activeSequence.CTI.frames; // (Current Time Indicator), for the active sequence.
- var timeTicks = activeSequence.CTI.ticks;
- var timeString = activeSequence.CTI.timecode;
+ var seqInPoint = app.project.activeSequence.getInPoint(); // new in 9.0
+ var seqOutPoint = app.project.activeSequence.getOutPoint(); // new in 9.0
- var seqInPoint = app.project.activeSequence.getInPoint(); // new in 9.0
- var seqOutPoint = app.project.activeSequence.getOutPoint(); // new in 9.0
+ var seqInPointAsTime = app.project.activeSequence.getInPointAsTime(); // new in 12.0
+ var seqOutPointAsTime = app.project.activeSequence.getOutPointAsTime(); // new in 12.0
- var seqInPointAsTime = app.project.activeSequence.getInPointAsTime(); // new in 12.0
- var seqOutPointAsTime = app.project.activeSequence.getOutPointAsTime(); // new in 12.0
+ var projPath = new File(app.project.path);
+ var outputPath = Folder.selectDialog('Choose the output directory');
- var projPath = new File(app.project.path);
- var outputPath = Folder.selectDialog("Choose the output directory");
+ if (outputPath && projPath.exists) {
+ var outPreset = new File(outputPresetPath);
+ if (outPreset.exists === true) {
+ var outputFormatExtension = activeSequence.getExportFileExtension(
+ outPreset.fsName
+ );
+ if (outputFormatExtension) {
+ var outputFilename =
+ activeSequence.name + '.' + outputFormatExtension;
- if ((outputPath) && projPath.exists) {
- var outPreset = new File(outputPresetPath);
- if (outPreset.exists === true) {
- var outputFormatExtension = activeSequence.getExportFileExtension(outPreset.fsName);
- if (outputFormatExtension) {
- var outputFilename = activeSequence.name + '.' + outputFormatExtension;
+ var fullPathToFile =
+ outputPath.fsName +
+ $._PPP_.getSep() +
+ activeSequence.name +
+ '.' +
+ outputFormatExtension;
- var fullPathToFile = outputPath.fsName +
- $._PPP_.getSep() +
- activeSequence.name +
- "." +
- outputFormatExtension;
+ var outFileTest = new File(fullPathToFile);
- var outFileTest = new File(fullPathToFile);
-
- if (outFileTest.exists) {
- var destroyExisting = confirm("A file with that name already exists; overwrite?", false, "Are you sure...?");
- if (destroyExisting) {
- outFileTest.remove();
- outFileTest.close();
+ if (outFileTest.exists) {
+ var destroyExisting = confirm(
+ 'A file with that name already exists; overwrite?',
+ false,
+ 'Are you sure...?'
+ );
+ if (destroyExisting) {
+ outFileTest.remove();
+ outFileTest.close();
+ }
}
+
+ app.encoder.bind(
+ 'onEncoderJobComplete',
+ $._PPP_.onEncoderJobComplete
+ );
+ app.encoder.bind('onEncoderJobError', $._PPP_.onEncoderJobError);
+ app.encoder.bind(
+ 'onEncoderJobProgress',
+ $._PPP_.onEncoderJobProgress
+ );
+ app.encoder.bind(
+ 'onEncoderJobQueued',
+ $._PPP_.onEncoderJobQueued
+ );
+ app.encoder.bind(
+ 'onEncoderJobCanceled',
+ $._PPP_.onEncoderJobCanceled
+ );
+
+ app.encoder.setSidecarXMPEnabled(0); // use these 0 or 1 settings to disable some/all metadata creation.
+ app.encoder.setEmbeddedXMPEnabled(0);
+
+ /*
+ For reference, here's how to export from within PPro (blocking further user interaction).
+
+ var seq = app.project.activeSequence;
+
+ if (seq) {
+ seq.exportAsMediaDirect(fullPathToFile,
+ outPreset.fsName,
+ app.encoder.ENCODE_WORKAREA);
+
+ Bonus: Here's how to compute a sequence's duration, in ticks. 254016000000 ticks/second.
+ var sequenceDuration = app.project.activeSequence.end - app.project.activeSequence.zeroPoint;
+ }
+ */
+
+ var removeFromQueueUponSuccess = 1;
+ var jobID = app.encoder.encodeSequence(
+ app.project.activeSequence,
+ fullPathToFile,
+ outPreset.fsName,
+ app.encoder.ENCODE_WORKAREA,
+ removeFromQueueUponSuccess
+ );
+
+ $._PPP_.updateEventPanel('jobID = ' + jobID);
+ outPreset.close();
}
-
- app.encoder.bind('onEncoderJobComplete', $._PPP_.onEncoderJobComplete);
- app.encoder.bind('onEncoderJobError', $._PPP_.onEncoderJobError);
- app.encoder.bind('onEncoderJobProgress', $._PPP_.onEncoderJobProgress);
- app.encoder.bind('onEncoderJobQueued', $._PPP_.onEncoderJobQueued);
- app.encoder.bind('onEncoderJobCanceled', $._PPP_.onEncoderJobCanceled);
-
-
- // use these 0 or 1 settings to disable some/all metadata creation.
-
- app.encoder.setSidecarXMPEnabled(0);
- app.encoder.setEmbeddedXMPEnabled(0);
-
- /*
-
- For reference, here's how to export from within PPro (blocking further user interaction).
-
- var seq = app.project.activeSequence;
-
- if (seq) {
- seq.exportAsMediaDirect(fullPathToFile,
- outPreset.fsName,
- app.encoder.ENCODE_WORKAREA);
-
- Bonus: Here's how to compute a sequence's duration, in ticks. 254016000000 ticks/second.
- var sequenceDuration = app.project.activeSequence.end - app.project.activeSequence.zeroPoint;
- }
-
- */
-
- var jobID = app.encoder.encodeSequence(app.project.activeSequence,
- fullPathToFile,
- outPreset.fsName,
- app.encoder.ENCODE_IN_TO_OUT,
- 1); // Remove from queue upon successful completion?
- $._PPP_.updateEventPanel('jobID = ' + jobID);
- outPreset.close();
+ } else {
+ $._PPP_.updateEventPanel('Could not find output preset.');
}
} else {
- $._PPP_.updateEventPanel("Could not find output preset.");
+ $._PPP_.updateEventPanel('Could not find/create output path.');
}
- } else {
- $._PPP_.updateEventPanel("Could not find/create output path.");
+ projPath.close();
}
- projPath.close();
} else {
- $._PPP_.updateEventPanel("No active sequence.");
+ $._PPP_.updateEventPanel('No active sequence.');
}
},
- saveProjectCopy: function () {
+ saveProjectCopy: function() {
var sessionCounter = 1;
var originalPath = app.project.path;
- var outputPath = Folder.selectDialog("Choose the output directory");
+ var outputPath = Folder.selectDialog('Choose the output directory');
if (outputPath) {
var absPath = outputPath.fsName;
@@ -694,95 +901,119 @@ $._PPP_ = {
for (var a = 0; a < app.projects.numProjects; a++) {
var currentProject = app.projects[a];
if (currentProject.path === fullOutPath) {
- app.openDocument(originalPath); // Why first? So we don't frighten the user by making PPro's window disappear. :)
+ app.openDocument(originalPath, true, false, false); // Why first? So we don't frighten the user by making PPro's window disappear. :)
currentProject.closeDocument();
}
}
} else {
- $._PPP_.updateEventPanel("No output path chosen.");
+ $._PPP_.updateEventPanel('No output path chosen.');
}
},
- mungeXMP: function () {
+ mungeXMP: function() {
var projectItem = app.project.rootItem.children[0]; // assumes first item is footage.
if (projectItem) {
if (ExternalObject.AdobeXMPScript === undefined) {
- ExternalObject.AdobeXMPScript = new ExternalObject('lib:AdobeXMPScript');
+ ExternalObject.AdobeXMPScript = new ExternalObject(
+ 'lib:AdobeXMPScript'
+ );
}
- if (ExternalObject.AdobeXMPScript !== undefined) { // safety-conscious!
+ if (ExternalObject.AdobeXMPScript !== undefined) {
+ // safety-conscious!
var xmpBlob = projectItem.getXMPMetadata();
var xmp = new XMPMeta(xmpBlob);
- var oldSceneVal = "";
- var oldDMCreatorVal = "";
+ var oldSceneVal = '';
+ var oldDMCreatorVal = '';
- if (xmp.doesPropertyExist(XMPConst.NS_DM, "scene") === true) {
- var myScene = xmp.getProperty(XMPConst.NS_DM, "scene");
+ if (xmp.doesPropertyExist(XMPConst.NS_DM, 'scene') === true) {
+ var myScene = xmp.getProperty(XMPConst.NS_DM, 'scene');
oldSceneVal = myScene.value;
}
- if (xmp.doesPropertyExist(XMPConst.NS_DM, "creator") === true) {
- var myCreator = xmp.getProperty(XMPConst.NS_DM, "creator");
- oldCreatorVal = myCreator.value;
+ if (xmp.doesPropertyExist(XMPConst.NS_DM, 'creator') === true) {
+ var myCreator = xmp.getProperty(XMPConst.NS_DM, 'creator');
+ oldDMCreatorVal = myCreator.value;
}
// Regardless of whether there WAS scene or creator data, set scene and creator data.
- xmp.setProperty(XMPConst.NS_DM, "scene", oldSceneVal + " Added by PProPanel sample!");
- xmp.setProperty(XMPConst.NS_DM, "creator", oldDMCreatorVal + " Added by PProPanel sample!");
+ xmp.setProperty(
+ XMPConst.NS_DM,
+ 'scene',
+ oldSceneVal + ' Added by PProPanel sample!'
+ );
+ xmp.setProperty(
+ XMPConst.NS_DM,
+ 'creator',
+ oldDMCreatorVal + ' Added by PProPanel sample!'
+ );
// That was the NS_DM creator; here's the NS_DC creator.
- var creatorProp = "creator";
- var containsDMCreatorValue = xmp.doesPropertyExist(XMPConst.NS_DC, creatorProp);
- var numCreatorValuesPresent = xmp.countArrayItems(XMPConst.NS_DC, creatorProp);
- var CreatorsSeparatedBy4PoundSigns = "";
+ var creatorProp = 'creator';
+ var containsDMCreatorValue = xmp.doesPropertyExist(
+ XMPConst.NS_DC,
+ creatorProp
+ );
+ var numCreatorValuesPresent = xmp.countArrayItems(
+ XMPConst.NS_DC,
+ creatorProp
+ );
+ var CreatorsSeparatedBy4PoundSigns = '';
if (numCreatorValuesPresent > 0) {
for (var z = 0; z < numCreatorValuesPresent; z++) {
- CreatorsSeparatedBy4PoundSigns = CreatorsSeparatedBy4PoundSigns + xmp.getArrayItem(XMPConst.NS_DC, creatorProp, z + 1);
- CreatorsSeparatedBy4PoundSigns = CreatorsSeparatedBy4PoundSigns + "####";
+ CreatorsSeparatedBy4PoundSigns =
+ CreatorsSeparatedBy4PoundSigns +
+ xmp.getArrayItem(XMPConst.NS_DC, creatorProp, z + 1);
+ CreatorsSeparatedBy4PoundSigns =
+ CreatorsSeparatedBy4PoundSigns + '####';
}
$._PPP_.updateEventPanel(CreatorsSeparatedBy4PoundSigns);
- if (confirm("Replace previous?", false, "Replace existing Creator?")) {
- xmp.deleteProperty(XMPConst.NS_DC, "creator");
+ if (
+ confirm('Replace previous?', false, 'Replace existing Creator?')
+ ) {
+ xmp.deleteProperty(XMPConst.NS_DC, 'creator');
}
- xmp.appendArrayItem(XMPConst.NS_DC, // If no values exist, appendArrayItem will create a value.
+ xmp.appendArrayItem(
+ XMPConst.NS_DC, // If no values exist, appendArrayItem will create a value.
creatorProp,
- numCreatorValuesPresent + " creator values were already present.",
+ numCreatorValuesPresent + ' creator values were already present.',
null,
- XMPConst.ARRAY_IS_ORDERED);
-
+ XMPConst.ARRAY_IS_ORDERED
+ );
} else {
-
- xmp.appendArrayItem(XMPConst.NS_DC,
+ xmp.appendArrayItem(
+ XMPConst.NS_DC,
creatorProp,
- "PProPanel wrote the first value into NS_DC creator field.",
+ 'PProPanel wrote the first value into NS_DC creator field.',
null,
- XMPConst.ARRAY_IS_ORDERED);
+ XMPConst.ARRAY_IS_ORDERED
+ );
}
var xmpAsString = xmp.serialize(); // either way, serialize and write XMP.
projectItem.setXMPMetadata(xmpAsString);
}
} else {
- $._PPP_.updateEventPanel("Project item required.");
+ $._PPP_.updateEventPanel('Project item required.');
}
},
- getProductionByName: function (nameToGet) {
+ getProductionByName: function(nameToGet) {
var production;
- for (var i = 0; i < productionList.numProductions; i++) {
- var currentProduction = productionList[i];
-
- if (currentProduction.name == nameToGet) {
+ var allProductions = app.anywhere.listProductions();
+ for (var i = 0; i < allProductions.numProductions; i++) {
+ var currentProduction = allProductions[i];
+ if (currentProduction.name === nameToGet) {
production = currentProduction;
}
}
return production;
},
- pokeAnywhere: function () {
+ pokeAnywhere: function() {
var token = app.anywhere.getAuthenticationToken();
var productionList = app.anywhere.listProductions();
var isProductionOpen = app.anywhere.isProductionOpen();
@@ -790,28 +1021,27 @@ $._PPP_ = {
var sessionURL = app.anywhere.getCurrentEditingSessionURL();
var selectionURL = app.anywhere.getCurrentEditingSessionSelectionURL();
var activeSequenceURL = app.anywhere.getCurrentEditingSessionActiveSequenceURL();
-
- var theOneIAskedFor = $._PPP_.getProductionByName("test");
-
+ var theOneIAskedFor = $._PPP_.getProductionByName('test');
if (theOneIAskedFor) {
- var out = theOneIAskedFor.name + ", " + theOneIAskedFor.description;
- $._PPP_.updateEventPanel("Found: " + out); // todo: put useful code here.
+ var out = theOneIAskedFor.name + ', ' + theOneIAskedFor.description;
+ $._PPP_.updateEventPanel('Found: ' + out); // todo: put useful code here.
}
} else {
- $._PPP_.updateEventPanel("No Production open.");
+ $._PPP_.updateEventPanel('No Production open.');
}
},
- dumpOMF: function () {
+ dumpOMF: function() {
var activeSequence = app.project.activeSequence;
if (activeSequence) {
- var outputPath = Folder.selectDialog("Choose the output directory");
+ var outputPath = Folder.selectDialog('Choose the output directory');
if (outputPath) {
var absPath = outputPath.fsName;
var outputName = String(activeSequence.name) + '.omf';
var fullOutPathWithName = absPath + $._PPP_.getSep() + outputName;
- app.project.exportOMF(app.project.activeSequence, // sequence
+ app.project.exportOMF(
+ app.project.activeSequence, // sequence
fullOutPathWithName, // output file path
'OMFTitle', // OMF title
48000, // sample rate (48000 or 96000)
@@ -820,112 +1050,140 @@ $._PPP_ = {
0, // audio file format (0 : AIFF or 1 : WAV)
0, // trim audio files (0 : no or 1 : yes)
0, // handle frames (if trim is 1, handle frames from 0 to 1000)
- 0); // include pan flag (0 : no or 1 : yes)
+ 0
+ ); // include pan flag (0 : no or 1 : yes)
}
} else {
- $._PPP_.updateEventPanel("No active sequence.");
+ $._PPP_.updateEventPanel('No active sequence.');
}
},
- addClipMarkers: function () {
+ addClipMarkers: function() {
if (app.project.rootItem.children.numItems > 0) {
var projectItem = app.project.rootItem.children[0]; // assumes first item is footage.
if (projectItem) {
- if (projectItem.type == ProjectItemType.CLIP || projectItem.type == ProjectItemType.FILE) {
-
- markers = projectItem.getMarkers();
-
+ if (
+ projectItem.type == ProjectItemType.CLIP ||
+ projectItem.type == ProjectItemType.FILE
+ ) {
+ var markers = projectItem.getMarkers();
if (markers) {
- var num_markers = markers.numMarkers;
- var new_marker = markers.createMarker(12.345);
- var guid = new_marker.guid; // new in 11.1
-
- new_marker.name = 'Marker created by PProPanel.';
- new_marker.comments = 'Here are some comments, inserted by PProPanel.';
- new_marker.end = 15.6789;
+ var numMarkers = markers.numMarkers;
+ var newMarker = markers.createMarker(12.345);
+ var guid = newMarker.guid; // new in 11.1
+ newMarker.name = 'Marker created by PProPanel.';
+ newMarker.comments =
+ 'Here are some comments, inserted by PProPanel.';
+ var tempTime = new Time();
+ tempTime.seconds = 15.6789;
+ newMarker.end = tempTime;
//default marker type == comment. To change marker type, call one of these:
- // new_marker.setTypeAsChapter();
- // new_marker.setTypeAsWebLink();
- // new_marker.setTypeAsSegmentation();
- // new_marker.setTypeAsComment();
+ // newMarker.setTypeAsChapter();
+ // newMarker.setTypeAsWebLink();
+ // newMarker.setTypeAsSegmentation();
+ // newMarker.setTypeAsComment();
}
} else {
- $._PPP_.updateEventPanel("Can only add markers to footage items.");
+ $._PPP_.updateEventPanel('Can only add markers to footage items.');
}
} else {
- $._PPP_.updateEventPanel("Could not find first projectItem.");
+ $._PPP_.updateEventPanel('Could not find first projectItem.');
}
} else {
- $._PPP_.updateEventPanel("Project is empty.");
+ $._PPP_.updateEventPanel('Project is empty.');
}
},
- modifyProjectMetadata: function () {
- var kPProPrivateProjectMetadataURI = "http://ns.adobe.com/premierePrivateProjectMetaData/1.0/";
-
- var namefield = "Column.Intrinsic.Name";
- var tapename = "Column.Intrinsic.TapeName";
- var desc = "Column.PropertyText.Description";
- var logNote = "Column.Intrinsic.LogNote";
- var newField = "ExampleFieldName";
+ modifyProjectMetadata: function() {
+ var kPProPrivateProjectMetadataURI =
+ 'http://ns.adobe.com/premierePrivateProjectMetaData/1.0/';
+ var nameField = 'Column.Intrinsic.Name';
+ var tapeName = 'Column.Intrinsic.TapeName';
+ var logNote = 'Column.Intrinsic.LogNote';
+ var newField = 'ExampleFieldName';
+ var desc = 'Column.PropertyText.Description';
if (app.isDocumentOpen()) {
var projectItem = app.project.rootItem.children[0]; // just grabs first projectItem.
if (projectItem) {
if (ExternalObject.AdobeXMPScript === undefined) {
- ExternalObject.AdobeXMPScript = new ExternalObject('lib:AdobeXMPScript');
+ ExternalObject.AdobeXMPScript = new ExternalObject(
+ 'lib:AdobeXMPScript'
+ );
}
- if (ExternalObject.AdobeXMPScript !== undefined) { // safety-conscious!
+ if (ExternalObject.AdobeXMPScript !== undefined) {
+ // safety-conscious!
var projectMetadata = projectItem.getProjectMetadata();
- var successfullyAdded = app.project.addPropertyToProjectMetadataSchema(newField, "ExampleFieldLabel", 2);
-
+ var successfullyAdded = app.project.addPropertyToProjectMetadataSchema(
+ newField,
+ 'ExampleFieldLabel',
+ 2
+ );
var xmp = new XMPMeta(projectMetadata);
var obj = xmp.dumpObject();
-
- // var aliases = xmp.dumpAliases();
-
- var namespaces = XMPMeta.dumpNamespaces();
- var found_name = xmp.doesPropertyExist(kPProPrivateProjectMetadataURI, namefield);
- var found_tapename = xmp.doesPropertyExist(kPProPrivateProjectMetadataURI, tapename);
- var found_desc = xmp.doesPropertyExist(kPProPrivateProjectMetadataURI, desc);
- var found_custom = xmp.doesPropertyExist(kPProPrivateProjectMetadataURI, newField);
- var foundLogNote = xmp.doesPropertyExist(kPProPrivateProjectMetadataURI, logNote);
- var oldLogValue = "";
- var appendThis = "This log note inserted by PProPanel.";
+ var foundLogNote = xmp.doesPropertyExist(
+ kPProPrivateProjectMetadataURI,
+ logNote
+ );
+ var oldLogValue = '';
+ var appendThis = 'This log note inserted by PProPanel.';
var appendTextWasActuallyNew = false;
if (foundLogNote) {
- var oldLogNote = xmp.getProperty(kPProPrivateProjectMetadataURI, logNote);
+ var oldLogNote = xmp.getProperty(
+ kPProPrivateProjectMetadataURI,
+ logNote
+ );
if (oldLogNote) {
oldLogValue = oldLogNote.value;
}
}
-
- xmp.setProperty(kPProPrivateProjectMetadataURI, tapename, "***TAPENAME***");
- xmp.setProperty(kPProPrivateProjectMetadataURI, desc, "***DESCRIPTION***");
- xmp.setProperty(kPProPrivateProjectMetadataURI, namefield, "***NEWNAME***");
- xmp.setProperty(kPProPrivateProjectMetadataURI, newField, "PProPanel set this, using addPropertyToProjectMetadataSchema().");
-
+ xmp.setProperty(
+ kPProPrivateProjectMetadataURI,
+ tapeName,
+ '***TAPENAME***'
+ );
+ xmp.setProperty(
+ kPProPrivateProjectMetadataURI,
+ desc,
+ '***DESCRIPTION***'
+ );
+ xmp.setProperty(
+ kPProPrivateProjectMetadataURI,
+ nameField,
+ '***NEWNAME***'
+ );
+ xmp.setProperty(
+ kPProPrivateProjectMetadataURI,
+ newField,
+ 'PProPanel set this, using addPropertyToProjectMetadataSchema().'
+ );
var array = [];
- array[0] = tapename;
+ array[0] = tapeName;
array[1] = desc;
- array[2] = namefield;
+ array[2] = nameField;
array[3] = newField;
- var concatenatedLogNotes = "";
+ var concatenatedLogNotes = '';
- if (oldLogValue != appendThis) { // if that value is not exactly what we were going to add
- if (oldLogValue.length > 0) { // if we have a valid value
- concatenatedLogNotes += "Previous log notes: " + oldLogValue + " |||| ";
+ if (oldLogValue != appendThis) {
+ // if that value is not exactly what we were going to add
+ if (oldLogValue.length > 0) {
+ // if we have a valid value
+ concatenatedLogNotes +=
+ 'Previous log notes: ' + oldLogValue + ' |||| ';
}
concatenatedLogNotes += appendThis;
- xmp.setProperty(kPProPrivateProjectMetadataURI, logNote, concatenatedLogNotes);
+ xmp.setProperty(
+ kPProPrivateProjectMetadataURI,
+ logNote,
+ concatenatedLogNotes
+ );
array[4] = logNote;
}
-
var str = xmp.serialize();
projectItem.setProjectMetadata(str, array);
@@ -933,53 +1191,63 @@ $._PPP_ = {
var newblob = projectItem.getProjectMetadata();
var newXMP = new XMPMeta(newblob);
- var foundYet = newXMP.doesPropertyExist(kPProPrivateProjectMetadataURI, newField);
+ var foundYet = newXMP.doesPropertyExist(
+ kPProPrivateProjectMetadataURI,
+ newField
+ );
if (foundYet) {
- $._PPP_.updateEventPanel("PProPanel successfully added a field to the project metadata schema, and set a value for it.");
+ $._PPP_.updateEventPanel(
+ 'PProPanel successfully added a field to the project metadata schema, and set a value for it.'
+ );
}
}
} else {
- $._PPP_.updateEventPanel("No project items found.");
+ $._PPP_.updateEventPanel('No project items found.');
}
}
},
- updatePAR: function () {
+ updatePAR: function() {
var item = app.project.rootItem.children[0];
if (item) {
- if ((item.type == ProjectItemType.FILE) || (item.type == ProjectItemType.CLIP)) {
+ if (
+ item.type == ProjectItemType.FILE ||
+ item.type == ProjectItemType.CLIP
+ ) {
// If there is an item, and it's either a clip or file...
- item.setOverridePixelAspectRatio(185, 100); // anamorphic is BACK! ;)
+ item.setOverridePixelAspectRatio(185, 100); // anamorphic is BACK! ;)
} else {
- $._PPP_.updateEventPanel('You cannot override the PAR of bins or sequences.');
+ $._PPP_.updateEventPanel(
+ 'You cannot override the PAR of bins or sequences.'
+ );
}
} else {
- $._PPP_.updateEventPanel("No project items found.");
+ $._PPP_.updateEventPanel('No project items found.');
}
},
- getnumAEProjectItems: function () {
+ getnumAEProjectItems: function() {
var bt = new BridgeTalk();
bt.target = 'aftereffects';
- bt.body = //'$._PPP_.updateEventPanel("Items in AE project: " + app.project.rootFolder.numItems);app.quit();';
+ bt.body =
'alert("Items in AE project: " + app.project.rootFolder.numItems);app.quit();';
bt.send();
},
- updateEventPanel: function (message) {
+ updateEventPanel: function(message) {
app.setSDKEventMessage(message, 'info');
//app.setSDKEventMessage('Here is some information.', 'info');
//app.setSDKEventMessage('Here is a warning.', 'warning');
- //app.setSDKEventMessage('Here is an error.', 'error'); // Very annoying; use sparingly.
+ //app.setSDKEventMessage('Here is an error.', 'error'); Very annoying; use sparingly.
},
- walkAllBinsForFootage: function (parentItem, outPath) {
+ walkAllBinsDumpingXMP: function(parentItem, outPath) {
for (var j = 0; j < parentItem.children.numItems; j++) {
var currentChild = parentItem.children[j];
if (currentChild) {
- if (currentChild.type == ProjectItemType.BIN) {
- $._PPP_.walkAllBinsForFootage(currentChild, outPath); // warning; recursion!
+ if (currentChild.type === ProjectItemType.BIN) {
+ $._PPP_.walkAllBinsDumpingXMP(currentChild, outPath); // warning; recursion!
} else {
$._PPP_.dumpProjectItemXMP(currentChild, outPath);
}
@@ -987,19 +1255,40 @@ $._PPP_ = {
}
},
- searchBinForProjItemByName: function (i, containingBin, nameToFind) {
+ walkAllBinsUpdatingPaths: function(parentItem, outPath) {
+ for (var j = 0; j < parentItem.children.numItems; j++) {
+ var currentChild = parentItem.children[j];
+ if (currentChild) {
+ if (currentChild.type === ProjectItemType.BIN) {
+ $._PPP_.walkAllBinsUpdatingPaths(currentChild, outPath); // warning; recursion!
+ } else {
+ $._PPP_.updateProjectItemPath(currentChild, outPath);
+ }
+ }
+ }
+ },
+
+ searchBinForProjItemByName: function(i, containingBin, nameToFind) {
for (var j = i; j < containingBin.children.numItems; j++) {
var currentChild = containingBin.children[j];
if (currentChild) {
- if (currentChild.type == ProjectItemType.BIN) {
- return $._PPP_.searchBinForProjItemByName(j, currentChild, nameToFind); // warning; recursion!
+ if (currentChild.type === ProjectItemType.BIN) {
+ return $._PPP_.searchBinForProjItemByName(
+ j,
+ currentChild,
+ nameToFind
+ ); // warning; recursion!
} else {
- if (currentChild.name == nameToFind) {
+ if (currentChild.name === nameToFind) {
return currentChild;
} else {
- currentChild = currentItem.children[j + 1];
+ currentChild = currentChild.children[j + 1];
if (currentChild) {
- return $._PPP_.searchBinForProjItemByName(0, currentChild, nameToFind);
+ return $._PPP_.searchBinForProjItemByName(
+ 0,
+ currentChild,
+ nameToFind
+ );
}
}
}
@@ -1007,64 +1296,78 @@ $._PPP_ = {
}
},
- dumpProjectItemXMP: function (projectItem, outPath) {
+ dumpProjectItemXMP: function(projectItem, outPath) {
var xmpBlob = projectItem.getXMPMetadata();
var outFileName = projectItem.name + '.xmp';
var completeOutputPath = outPath + $._PPP_.getSep() + outFileName;
var outFile = new File(completeOutputPath);
-
var isThisASequence = projectItem.isSequence();
if (outFile) {
- outFile.encoding = "UTF8";
- outFile.open("w", "TEXT", "????");
+ outFile.encoding = 'UTF8';
+ outFile.open('w', 'TEXT', '????');
outFile.write(xmpBlob.toString());
outFile.close();
}
},
- addSubClip: function () {
- var startTime = new Time;
+ addSubClip: function() {
+ var startTime = new Time();
startTime.seconds = 0.0;
- var endTime = new Time;
+ var endTime = new Time();
endTime.seconds = 3.21;
var hasHardBoundaries = 0;
var sessionCounter = 1;
var takeVideo = 1; // optional, defaults to 1
- var takeAudio = 1; // optional, defaults to 1
+ var takeAudio = 1; // optional, defaults to 1
var projectItem = app.project.rootItem.children[0]; // just grabs the first item
if (projectItem) {
- if ((projectItem.type == ProjectItemType.CLIP) || (projectItem.type == ProjectItemType.FILE)) {
- var newSubClipName = prompt('Name of subclip?', projectItem.name + '_' + sessionCounter, 'Name your subclip');
-
- var newSubClip = projectItem.createSubClip(newSubClipName,
- startTime,
- endTime,
- hasHardBoundaries,
- takeVideo,
- takeAudio);
-
- if (newSubClip) {
- newSubClip.setStartTime(12.345);
+ if (
+ projectItem.type === ProjectItemType.CLIP ||
+ projectItem.type === ProjectItemType.FILE
+ ) {
+ var newSubClipName = prompt(
+ 'Name of subclip?',
+ projectItem.name + '_' + sessionCounter,
+ 'Name your subclip'
+ );
+ if (newSubClipName) {
+ var newSubClip = projectItem.createSubClip(
+ newSubClipName,
+ startTime,
+ endTime,
+ hasHardBoundaries,
+ takeVideo,
+ takeAudio
+ );
+ if (newSubClip) {
+ var newStartTime = new Time();
+ newStartTime.seconds = 12.345;
+ newSubClip.setStartTime(newStartTime);
+ }
+ } else {
+ $._PPP_.updateEventPanel('No name provided for sub-clip.');
}
} else {
- $._PPP_.updateEventPanel("Could not sub-clip " + projectItem.name + ".");
+ $._PPP_.updateEventPanel(
+ 'Could not sub-clip ' + projectItem.name + '.'
+ );
}
} else {
- $._PPP_.updateEventPanel("No project item found.");
+ $._PPP_.updateEventPanel('No project item found.');
}
},
- dumpXMPFromAllProjectItems: function () {
+ dumpXMPFromAllProjectItems: function() {
var numItemsInRoot = app.project.rootItem.children.numItems;
if (numItemsInRoot > 0) {
- var outPath = Folder.selectDialog("Choose the output directory");
+ var outPath = Folder.selectDialog('Choose the output directory');
if (outPath) {
for (var i = 0; i < numItemsInRoot; i++) {
var currentItem = app.project.rootItem.children[i];
if (currentItem) {
if (currentItem.type == ProjectItemType.BIN) {
- $._PPP_.walkAllBinsForFootage(currentItem, outPath.fsName);
+ $._PPP_.walkAllBinsDumpingXMP(currentItem, outPath.fsName);
} else {
$._PPP_.dumpProjectItemXMP(currentItem, outPath.fsName);
}
@@ -1072,25 +1375,24 @@ $._PPP_ = {
}
}
} else {
- $._PPP_.updateEventPanel("No project items found.");
+ $._PPP_.updateEventPanel('No project items found.');
}
},
- exportAAF: function () {
+ exportAAF: function() {
var sessionCounter = 1;
if (app.project.activeSequence) {
- var outputPath = Folder.selectDialog("Choose the output directory");
+ var outputPath = Folder.selectDialog('Choose the output directory');
if (outputPath) {
var absPath = outputPath.fsName;
var outputName = String(app.project.name);
var array = outputName.split('.', 2);
outputName = array[0] + sessionCounter + '.' + array[1];
-
- sessionCounter++;
var fullOutPath = absPath + $._PPP_.getSep() + outputName + '.aaf';
//var optionalPathToOutputPreset = null; New in 11.0.0, you can specify an output preset.
- app.project.exportAAF(app.project.activeSequence, // which sequence
+ app.project.exportAAF(
+ app.project.activeSequence, // which sequence
fullOutPath, // output path
1, // mix down video?
0, // explode to mono?
@@ -1098,128 +1400,145 @@ $._PPP_ = {
16, // bits per sample
0, // embed audio?
0, // audio file format? 0 = aiff, 1 = wav
- 0, // trim sources?
+ 0, // number of 'handle' frames
0
- /*, // number of 'handle' frames
- optionalPathToOutputPreset*/
+ /*
+ optionalPathToOutputPreset*/
); // optional; .epr file to use
+ sessionCounter++;
} else {
- $._PPP_.updateEventPanel("Couldn't create AAF output.");
+ $._PPP_.updateEventPanel('Couldn\'t create AAF output.');
}
} else {
- $._PPP_.updateEventPanel("No active sequence.");
+ $._PPP_.updateEventPanel('No active sequence.');
}
},
- setScratchDisk: function () {
- var scratchPath = Folder.selectDialog("Choose new scratch disk directory");
- if ((scratchPath) && scratchPath.exists) {
- app.setScratchDiskPath(scratchPath.fsName, ScratchDiskType.FirstAutoSaveFolder); // see ScratchDiskType object, in ESTK.
+ setScratchDisk: function() {
+ var scratchPath = Folder.selectDialog('Choose new scratch disk directory');
+ if (scratchPath && scratchPath.exists) {
+ app.setScratchDiskPath(
+ scratchPath.fsName,
+ ScratchDiskType.FirstAutoSaveFolder
+ ); // see ScratchDiskType object, in ESTK.
}
},
- getProjectProxySetting: function () {
- var returnVal = "";
+ getProjectProxySetting: function() {
+ var returnVal = '';
if (app.project) {
- var returnVal = "No sequence detected in " + app.project.name + ".";
+ var returnVal = 'No sequence detected in ' + app.project.name + '.';
if (app.getEnableProxies()) {
returnVal = 'true';
} else {
returnVal = 'false';
}
} else {
- returnVal = "No project available.";
+ returnVal = 'No project available.';
}
return returnVal;
},
- toggleProxyState: function () {
- var update = "Proxies for " + app.project.name + " turned ";
+ toggleProxyState: function() {
+ var update = 'Proxies for ' + app.project.name + ' turned ';
if (app.getEnableProxies()) {
app.setEnableProxies(0);
- update = update + "OFF.";
- app.setSDKEventMessage(update, 'info');
+ update = update + 'OFF.';
} else {
app.setEnableProxies(1);
- update = update + "ON.";
- app.setSDKEventMessage(update, 'info');
+ update = update + 'ON.';
}
+ $._PPP_.updateEventPanel(update);
},
- setProxiesON: function () {
+ setProxiesON: function() {
var firstProjectItem = app.project.rootItem.children[0];
if (firstProjectItem) {
if (firstProjectItem.canProxy()) {
var shouldAttachProxy = true;
if (firstProjectItem.hasProxy()) {
- shouldAttachProxy = confirm(firstProjectItem.name + " already has an assigned proxy. Re-assign anyway?", false, "Are you sure...?");
+ shouldAttachProxy = confirm(
+ firstProjectItem.name +
+ ' already has an assigned proxy. Re-assign anyway?',
+ false,
+ 'Are you sure...?'
+ );
}
if (shouldAttachProxy) {
- var filterString = "";
+ var filterString = '';
if (Folder.fs === 'Windows') {
- filterString = "All files:*.*";
+ filterString = 'All files:*.*';
}
- var proxyPath = File.openDialog("Choose proxy for " + firstProjectItem.name + ":",
+ var proxyPath = File.openDialog(
+ 'Choose proxy for ' + firstProjectItem.name + ':',
filterString,
- false);
+ false
+ );
if (proxyPath.exists) {
firstProjectItem.attachProxy(proxyPath.fsName, 0);
} else {
- $._PPP_.updateEventPanel("Could not attach proxy from " + proxyPath + ".");
+ $._PPP_.updateEventPanel(
+ 'Could not attach proxy from ' + proxyPath + '.'
+ );
}
}
} else {
- $._PPP_.updateEventPanel("Cannot attach a proxy to " + firstProjectItem.name + ".");
+ $._PPP_.updateEventPanel(
+ 'Cannot attach a proxy to ' + firstProjectItem.name + '.'
+ );
}
} else {
- $._PPP_.updateEventPanel("No project item available.");
+ $._PPP_.updateEventPanel('No project item available.');
}
},
- clearCache: function () {
+ clearCache: function() {
app.enableQE();
- MediaType = {};
-
- // Magical constants from Premiere Pro's internal automation.
-
- MediaType.VIDEO = "228CDA18-3625-4d2d-951E-348879E4ED93";
- MediaType.AUDIO = "80B8E3D5-6DCA-4195-AEFB-CB5F407AB009";
- MediaType.ANY = "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF";
- qe.project.deletePreviewFiles(MediaType.ANY);
- $._PPP_.updateEventPanel("All video and audio preview files deleted.");
+ qe.project.deletePreviewFiles(MediaType_ANY);
+ $._PPP_.updateEventPanel('All video and audio preview files deleted.');
},
- randomizeSequenceSelection: function () {
+ randomizeSequenceSelection: function() {
var sequence = app.project.activeSequence;
-
if (sequence) {
var trackGroups = [sequence.audioTracks, sequence.videoTracks];
- var trackGroupNames = ["audioTracks", "videoTracks"];
+ var trackGroupNames = ['audioTracks', 'videoTracks'];
var updateUI = true;
- var before;
- for (var gi = 0; gi < 2; gi++) {
- $._PPP_.updateEventPanel(trackGroupNames[gi]);
- group = trackGroups[gi];
- for (var ti = 0; ti < group.numTracks; ti++) {
- var track = group[ti];
+ for (var groupIndex = 0; groupIndex < 2; groupIndex++) {
+ $._PPP_.updateEventPanel(trackGroupNames[groupIndex]);
+ var group = trackGroups[groupIndex];
+ for (var trackIndex = 0; trackIndex < group.numTracks; trackIndex++) {
+ var track = group[trackIndex];
var clips = track.clips;
var transitions = track.transitions;
var beforeSelected;
var afterSelected;
+ var initialSelectState;
- $._PPP_.updateEventPanel("track : " + ti + " clip count: " + clips.numTracks + " transition count: " + transitions.numTracks);
+ $._PPP_.updateEventPanel(
+ 'track : ' +
+ trackIndex +
+ ' clip count: ' +
+ clips.numItems +
+ ' transition count: ' +
+ transitions.numItems
+ );
- for (var ci = 0; ci < clips.numTracks; ci++) {
- var clip = clips[ci];
- name = (clip.projectItem === undefined ? "" : clip.projectItem.name);
- before = clip.isSelected();
+ for (var clipIndex = 0; clipIndex < clips.numItems; clipIndex++) {
+ var clip = clips[clipIndex];
+ var name =
+ clip.projectItem === undefined ? '' : clip.projectItem.name;
+ initialSelectState = clip.isSelected();
// randomly select clips
- clip.setSelected((Math.random() > 0.5), updateUI);
+ clip.setSelected(Math.random() > 0.5, updateUI);
- if (clip.isAdjustmentLayer()) { // new in 13.0
- $._PPP_.updateEventPanel("Clip named \"" + clip.name + "\" is an adjustment layer.");
+ if (clip.isAdjustmentLayer()) {
+ // new in 13.0
+ $._PPP_.updateEventPanel(
+ 'Clip named "' + clip.name + '" is an adjustment layer.'
+ );
}
// Note; there's no good place to exercise this code yet, but
@@ -1228,91 +1547,120 @@ $._PPP_ = {
var allClipsInThisSequenceFromSameSource = clip.getLinkedItems();
if (allClipsInThisSequenceFromSameSource) {
- $._PPP_.updateEventPanel("Found " + allClipsInThisSequenceFromSameSource.numItems + " clips from " + clip.projectItem.name + ", in this sequence.");
+ $._PPP_.updateEventPanel(
+ 'Found ' +
+ allClipsInThisSequenceFromSameSource.numItems +
+ ' clips from ' +
+ clip.projectItem.name +
+ ', in this sequence.'
+ );
}
- beforeSelected = before ? "Y" : "N";
- afterSelected = clip.selected ? "Y" : "N";
- $._PPP_.updateEventPanel("clip : " + ci + " " + name + " " + beforeSelected + " -> " + afterSelected);
+ beforeSelected = initialSelectState ? 'Y' : 'N';
+ afterSelected = clip.isSelected() ? 'Y' : 'N';
+ $._PPP_.updateEventPanel(
+ 'clip : ' +
+ clipIndex +
+ ' ' +
+ name +
+ ' ' +
+ beforeSelected +
+ ' -> ' +
+ afterSelected
+ );
}
- for (var tni = 0; tni < transitions.numTracks; ++tni) {
+ for (var tni = 0; tni < transitions.numItems; ++tni) {
var transition = transitions[tni];
- before = transition.isSelected();
-
+ var doIt = false;
+ initialSelectState = transition.isSelected();
// randomly select transitions
- transition.setSelected((Math.random() > 0.5), updateUI);
-
- beforeSelected = before ? "Y" : "N";
- afterSelected = transition.selected ? "Y" : "N";
-
- $._PPP_.updateEventPanel('transition: ' + tni + " " + beforeSelected + " -> " + afterSelected);
+ if (Math.random() > 0.5) {
+ doIt = true;
+ }
+ transition.setSelected(doIt, updateUI);
+ beforeSelected = initialSelectState ? 'Y' : 'N';
+ afterSelected = transition.isSelected() ? 'Y' : 'N';
+ $._PPP_.updateEventPanel(
+ 'transition: ' +
+ tni +
+ ' ' +
+ beforeSelected +
+ ' -> ' +
+ afterSelected
+ );
}
}
}
} else {
- $._PPP_.updateEventPanel("no active sequence.");
+ $._PPP_.updateEventPanel('no active sequence.');
}
},
// Define a couple of callback functions, for AME to use during render.
- onEncoderJobComplete: function (jobID, outputFilePath) {
+ onEncoderJobComplete: function(jobID, outputFilePath) {
var eoName;
if (Folder.fs == 'Macintosh') {
- eoName = "PlugPlugExternalObject";
+ eoName = 'PlugPlugExternalObject';
} else {
- eoName = "PlugPlugExternalObject.dll";
+ eoName = 'PlugPlugExternalObject.dll';
}
+ var mylib = new ExternalObject('lib:' + eoName);
+
var suffixAddedByPPro = '_1'; // You should really test for any suffix.
var withoutExtension = outputFilePath.slice(0, -4); // trusting 3 char extension
- var lastIndex = outputFilePath.lastIndexOf(".");
+ var lastIndex = outputFilePath.lastIndexOf('.');
var extension = outputFilePath.substr(lastIndex + 1);
if (outputFilePath.indexOf(suffixAddedByPPro)) {
- $._PPP_.updateEventPanel(" Output filename was changed: the output preset name may have been added, or there may have been an existing file with that name. This would be a good place to deal with such occurrences.");
+ $._PPP_.updateEventPanel(
+ ' Output filename was changed: the output preset name may have been added, or there may have been an existing file with that name. This would be a good place to deal with such occurrences.'
+ );
}
- var mylib = new ExternalObject('lib:' + eoName);
var eventObj = new CSXSEvent();
-
- eventObj.type = "com.adobe.csxs.events.PProPanelRenderEvent";
- eventObj.data = "Rendered Job " + jobID + ", to " + outputFilePath + ".";
-
+ eventObj.type = 'com.adobe.csxs.events.PProPanelRenderEvent';
+ eventObj.data = 'Rendered Job ' + jobID + ', to ' + outputFilePath + '.';
eventObj.dispatch();
},
- onEncoderJobError: function (jobID, errorMessage) {
- var eoName;
-
+ onEncoderJobError: function(jobID, errorMessage) {
+ var eoName = '';
if (Folder.fs === 'Macintosh') {
- eoName = "PlugPlugExternalObject";
+ eoName = 'PlugPlugExternalObject';
} else {
- eoName = "PlugPlugExternalObject.dll";
+ eoName = 'PlugPlugExternalObject.dll';
}
-
- var mylib = new ExternalObject('lib:' + eoName);
var eventObj = new CSXSEvent();
-
- eventObj.type = "com.adobe.csxs.events.PProPanelRenderEvent";
- eventObj.data = "Job " + jobID + " failed, due to " + errorMessage + ".";
+ eventObj.type = 'com.adobe.csxs.events.PProPanelRenderEvent';
+ eventObj.data = 'Job ' + jobID + ' failed, due to ' + errorMessage + '.';
eventObj.dispatch();
},
- onEncoderJobProgress: function (jobID, progress) {
- $._PPP_.updateEventPanel('onEncoderJobProgress called. jobID = ' + jobID + '. progress = ' + progress + '.');
+ onEncoderJobProgress: function(jobID, progress) {
+ $._PPP_.updateEventPanel(
+ 'onEncoderJobProgress called. jobID = ' +
+ jobID +
+ '. progress = ' +
+ progress +
+ '.'
+ );
},
- onEncoderJobQueued: function (jobID) {
+ onEncoderJobQueued: function(jobID) {
+ $._PPP_.updateEventPanel('jobID ' + jobID + 'successfully queued.');
app.encoder.startBatch();
},
- onEncoderJobCanceled: function (jobID) {
- $._PPP_.updateEventPanel('OnEncoderJobCanceled called. jobID = ' + jobID + '.');
+ onEncoderJobCanceled: function(jobID) {
+ $._PPP_.updateEventPanel(
+ 'OnEncoderJobCanceled called. jobID = ' + jobID + '.'
+ );
},
- onPlayWithKeyframes: function () {
+ onPlayWithKeyframes: function() {
var seq = app.project.activeSequence;
if (seq) {
var firstVideoTrack = seq.videoTracks[0];
@@ -1322,34 +1670,60 @@ $._PPP_ = {
var clipComponents = firstClip.components;
if (clipComponents) {
for (var i = 0; i < clipComponents.numItems; ++i) {
- $._PPP_.updateEventPanel('component ' + i + ' = ' + clipComponents[i].matchName + ' : ' + clipComponents[i].displayName);
+ $._PPP_.updateEventPanel(
+ 'component ' +
+ i +
+ ' = ' +
+ clipComponents[i].matchName +
+ ' : ' +
+ clipComponents[i].displayName
+ );
}
if (clipComponents.numItems > 2) {
-
// 0 = clip
// 1 = Opacity
// N effects, then...
// Shape layer (new in 12.0)
+ var updateUI = true;
var blur = clipComponents[2]; // Assume Gaussian Blur is the first effect applied to the clip.
if (blur) {
var blurProps = blur.properties;
if (blurProps) {
for (var j = 0; j < blurProps.numItems; ++j) {
- $._PPP_.updateEventPanel('param ' + j + ' = ' + blurProps[j].displayName);
+ $._PPP_.updateEventPanel(
+ 'param ' + j + ' = ' + blurProps[j].displayName
+ );
}
var blurriness = blurProps[0];
+
+ /* Sample code showing how to get and set the values of a color parameter.
+
+ var colorToChange = change_colorProps[N]; // where 'N' is the index of the effect with a color param.
+
+ var colorVal = colorToChange.getColorValue();
+
+ var alpha = colorVal[0];
+ var red = colorVal[1];
+ var blue = colorVal[2];
+ var green = colorVal[3];
+
+ colorToChange.setColorValue(255, 33, 222, 111); // a, r, g, b
+
+ */
+
if (blurriness) {
if (!blurriness.isTimeVarying()) {
blurriness.setTimeVarying(true);
}
for (var k = 0; k < 20; ++k) {
- updateUI = (k == 9); // Decide how often to update PPro's UI
+ updateUI = k == 9; // Decide how often to update PPro's UI
blurriness.addKey(k);
- var blurVal = Math.sin(3.14159 * i / 5) * 20 + 25;
+ var blurVal = Math.sin((3.14159 * i) / 5) * 20 + 25;
blurriness.setValueAtKey(k, blurVal, updateUI);
}
}
+
var repeatEdgePixels = blurProps[2];
if (repeatEdgePixels) {
if (!repeatEdgePixels.getValue()) {
@@ -1357,10 +1731,14 @@ $._PPP_ = {
repeatEdgePixels.setValue(true, updateUI);
}
}
+
// look for keyframe nearest to 4s with 1/10 second tolerance
+
var keyFrameTime = blurriness.findNearestKey(4.0, 0.1);
if (keyFrameTime !== undefined) {
- $._PPP_.updateEventPanel('Found keyframe = ' + keyFrameTime.seconds);
+ $._PPP_.updateEventPanel(
+ 'Found keyframe = ' + keyFrameTime.seconds
+ );
} else {
$._PPP_.updateEventPanel('Keyframe not found.');
}
@@ -1370,7 +1748,9 @@ $._PPP_ = {
keyFrameTime = blurriness.findNearestKey(0.0, 0.1);
var lastKeyFrameTime = keyFrameTime;
while (keyFrameTime !== undefined) {
- $._PPP_.updateEventPanel('keyframe @ ' + keyFrameTime.seconds);
+ $._PPP_.updateEventPanel(
+ 'keyframe @ ' + keyFrameTime.seconds
+ );
lastKeyFrameTime = keyFrameTime;
keyFrameTime = blurriness.findNextKey(keyFrameTime);
}
@@ -1378,87 +1758,90 @@ $._PPP_ = {
// scan keyframes, backward
keyFrameTime = lastKeyFrameTime;
while (keyFrameTime !== undefined) {
- $._PPP_.updateEventPanel('keyframe @ ' + keyFrameTime.seconds);
+ $._PPP_.updateEventPanel(
+ 'keyframe @ ' + keyFrameTime.seconds
+ );
lastKeyFrameTime = keyFrameTime;
keyFrameTime = blurriness.findPreviousKey(keyFrameTime);
}
- // get all keyframes
-
- var blurKeyframesArray = blurriness.getKeys();
+ var blurKeyframesArray = blurriness.getKeys(); // get all keyframes
if (blurKeyframesArray) {
- $._PPP_.updateEventPanel(blurKeyframesArray.length + ' keyframes found');
+ $._PPP_.updateEventPanel(
+ blurKeyframesArray.length + ' keyframes found'
+ );
}
- // remove keyframe at 19s
- blurriness.removeKey(19);
+ blurriness.removeKey(19); // remove keyframe at 19s
- // remove keyframes in range from 0s to 5s
var shouldUpdateUI = true;
- blurriness.removeKeyRange(0, 5, shouldUpdateUI);
+ blurriness.removeKeyRange(0, 5, shouldUpdateUI); // remove keyframes in range from 0s to 5s
}
-
} else {
- $._PPP_.updateEventPanel("Please apply the Gaussian Blur effect to the first clip in the first video track of the active sequence.");
+ $._PPP_.updateEventPanel(
+ 'Please apply the Gaussian Blur effect to the first clip in the first video track of the active sequence.'
+ );
}
}
}
}
}
} else {
- $._PPP_.updateEventPanel("no active sequence.");
+ $._PPP_.updateEventPanel('no active sequence.');
}
},
- extractFileNameFromPath: function (fullPath) {
- var lastDot = fullPath.lastIndexOf(".");
- var lastSep = fullPath.lastIndexOf("/");
-
+ extractFileNameFromPath: function(fullPath) {
+ var lastDot = fullPath.lastIndexOf('.');
+ var lastSep = fullPath.lastIndexOf('/');
if (lastDot > -1) {
- return fullPath.substr((lastSep + 1), (fullPath.length - (lastDot + 1)));
+ return fullPath.substr(lastSep + 1, fullPath.length - (lastDot + 1));
} else {
return fullPath;
}
},
- onProxyTranscodeJobComplete: function (jobID, outputFilePath) {
+ onProxyTranscodeJobComplete: function(jobID, outputFilePath) {
var suffixAddedByPPro = '_1'; // You should really test for any suffix.
var withoutExtension = outputFilePath.slice(0, -4); // trusting 3 char extension
- var lastIndex = outputFilePath.lastIndexOf(".");
+ var lastIndex = outputFilePath.lastIndexOf('.');
var extension = outputFilePath.substr(lastIndex + 1);
-
var wrapper = [];
wrapper[0] = outputFilePath;
-
var nameToFind = 'Proxies generated by PProPanel';
var targetBin = $._PPP_.getPPPInsertionBin();
if (targetBin) {
- app.project.importFiles(wrapper);
+ app.project.importFiles(wrapper, true, null, false);
}
},
- onProxyTranscodeJobError: function (jobID, errorMessage) {
+ onProxyTranscodeJobError: function(jobID, errorMessage) {
$._PPP_.updateEventPanel(errorMessage);
},
- onProxyTranscodeJobQueued: function (jobID) {
+ onProxyTranscodeJobQueued: function(jobID) {
app.encoder.startBatch();
},
- ingestFiles: function (outputPresetPath) {
- app.encoder.bind('onEncoderJobComplete', $._PPP_.onProxyTranscodeJobComplete);
+ ingestFiles: function(outputPresetPath) {
+ app.encoder.bind(
+ 'onEncoderJobComplete',
+ $._PPP_.onProxyTranscodeJobComplete
+ );
app.encoder.bind('onEncoderJobError', $._PPP_.onProxyTranscodeJobError);
app.encoder.bind('onEncoderJobQueued', $._PPP_.onProxyTranscodeJobQueued);
app.encoder.bind('onEncoderJobCanceled', $._PPP_.onEncoderJobCanceled);
if (app.project) {
- var filterString = "";
+ var filterString = '';
if (Folder.fs === 'Windows') {
- filterString = "All files:*.*";
+ filterString = 'All files:*.*';
}
- var fileOrFilesToImport = File.openDialog("Choose full resolution files to import", // title
+ var fileOrFilesToImport = File.openDialog(
+ 'Choose full resolution files to import', // title
filterString, // filter available files?
- true); // allow multiple?
+ true
+ ); // allow multiple fiels to be selected?
if (fileOrFilesToImport) {
var nameToFind = 'Proxies generated by PProPanel';
var targetBin = $._PPP_.searchForBinWithName(nameToFind);
@@ -1473,65 +1856,89 @@ $._PPP_ = {
if (importThese) {
for (var i = 0; i < fileOrFilesToImport.length; i++) {
importThese[i] = fileOrFilesToImport[i].fsName;
- var justFileName = extractFileNameFromPath(importThese[i]);
+ var justFileName = $._PPP_.extractFileNameFromPath(
+ importThese[i]
+ );
var suffix = '_PROXY.mp4';
var containingPath = fileOrFilesToImport[i].parent.fsName;
- var completeProxyPath = containingPath + $._PPP_.getSep() + justFileName + suffix;
+ var completeProxyPath =
+ containingPath + $._PPP_.getSep() + justFileName + suffix;
- var jobID = app.encoder.encodeFile(fileOrFilesToImport[i].fsName,
+ var jobID = app.encoder.encodeFile(
+ fileOrFilesToImport[i].fsName,
completeProxyPath,
outputPresetPath,
- 0);
+ 0
+ );
}
- app.project.importFiles(importThese,
- 1, // suppress warnings
+ app.project.importFiles(
+ importThese,
+ true, // suppress warnings
targetBin,
- 0); // import as numbered stills
+ false
+ ); // import as numbered stills
}
} else {
- $._PPP_.updateEventPanel("Could not find or create target bin.");
+ $._PPP_.updateEventPanel('Could not find or create target bin.');
}
} else {
- $._PPP_.updateEventPanel("No files to import.");
+ $._PPP_.updateEventPanel('No files to import.');
}
} else {
- $._PPP_.updateEventPanel("No project found.");
+ $._PPP_.updateEventPanel('No project found.');
}
},
- insertOrAppend: function () {
+ insertOrAppend: function() {
var seq = app.project.activeSequence;
if (seq) {
var first = app.project.rootItem.children[0];
if (first) {
- var numVTracks = seq.videoTracks.numTracks;
- var targetVTrack = seq.videoTracks[(numVTracks - 1)];
- if (targetVTrack) {
- // If there are already clips in this track,
- // append this one to the end. Otherwise,
- // insert at start time.
-
- if (targetVTrack.clips.numItems > 0) {
- var lastClip = targetVTrack.clips[(targetVTrack.clips.numItems - 1)];
- if (lastClip) {
- targetVTrack.insertClip(first, lastClip.end.seconds);
+ if (!first.isSequence()) {
+ if (first.type !== ProjectItemType.BIN) {
+ var numVTracks = seq.videoTracks.numTracks;
+ var targetVTrack = seq.videoTracks[numVTracks - 1];
+ if (targetVTrack) {
+ // If there are already clips in this track, append this one to the end. Otherwise, insert at start time.
+ if (targetVTrack.clips.numItems > 0) {
+ var lastClip =
+ targetVTrack.clips[targetVTrack.clips.numItems - 1];
+ if (lastClip) {
+ targetVTrack.insertClip(first, lastClip.end.seconds);
+ }
+ } else {
+ var timeAtZero = new Time();
+ targetVTrack.insertClip(first, timeAtZero.seconds);
+ // New in 13.1; using the new linkSelection/unlinkSelection calls,
+ // panels can remove just the audio (or video) of a given clip.
+ var newlyAddedClip =
+ targetVTrack.clips[targetVTrack.clips.numItems - 1];
+ if (newlyAddedClip) {
+ newlyAddedClip.setSelected(true, true);
+ seq.unlinkSelection();
+ newlyAddedClip.remove(true, true);
+ seq.linkSelection();
+ }
+ }
+ } else {
+ $._PPP_.updateEventPanel('Could not find first video track.');
}
} else {
- targetVTrack.insertClip(first, '00;00;00;00');
+ $._PPP_.updateEventPanel(first.name + ' is a bin.');
}
} else {
- $._PPP_.updateEventPanel("Could not find first video track.");
+ $._PPP_.updateEventPanel(first.name + ' is a sequence.');
}
} else {
- $._PPP_.updateEventPanel("Couldn't locate first projectItem.");
+ $._PPP_.updateEventPanel('Couldn\'t locate first projectItem.');
}
} else {
- $._PPP_.updateEventPanel("no active sequence.");
+ $._PPP_.updateEventPanel('no active sequence.');
}
},
- overWrite: function () {
+ overWrite: function() {
var seq = app.project.activeSequence;
if (seq) {
var first = app.project.rootItem.children[0];
@@ -1541,25 +1948,25 @@ $._PPP_ = {
var now = seq.getPlayerPosition();
vTrack1.overwriteClip(first, now.seconds);
} else {
- $._PPP_.updateEventPanel("Could not find first video track.");
+ $._PPP_.updateEventPanel('Could not find first video track.');
}
} else {
- $._PPP_.updateEventPanel("Couldn't locate first projectItem.");
+ $._PPP_.updateEventPanel('Couldn\'t locate first projectItem.');
}
} else {
- $._PPP_.updateEventPanel("no active sequence.");
+ $._PPP_.updateEventPanel('no active sequence.');
}
},
- closeFrontSourceClip: function () {
+ closeFrontSourceClip: function() {
app.sourceMonitor.closeClip();
},
- closeAllClipsInSourceMonitor: function () {
+ closeAllClipsInSourceMonitor: function() {
app.sourceMonitor.closeAllClips();
},
- changeLabel: function () {
+ changeLabel: function() {
var first = app.project.rootItem.children[0];
if (first) {
var currentLabel = first.getColorLabel();
@@ -1567,17 +1974,16 @@ $._PPP_ = {
if (newLabel > 15) {
newLabel = newLabel - 16;
}
- app.setSDKEventMessage("Previous Label color = " + currentLabel + ".", 'info');
+ $._PPP_.updateEventPanel('Previous Label color = ' + currentLabel + '.');
first.setColorLabel(newLabel);
- app.setSDKEventMessage("New Label color = " + newLabel + ".", 'info');
+ $._PPP_.updateEventPanel('New Label color = ' + newLabel + '.');
} else {
- $._PPP_.updateEventPanel("Couldn't locate first projectItem.");
+ $._PPP_.updateEventPanel('Couldn\'t locate first projectItem.');
}
},
- getPPPInsertionBin: function () {
- var nameToFind = "Here's where PProPanel puts things.";
-
+ getPPPInsertionBin: function() {
+ var nameToFind = 'Here\'s where PProPanel puts things.';
var targetBin = $._PPP_.searchForBinWithName(nameToFind);
if (targetBin === undefined) {
@@ -1588,74 +1994,99 @@ $._PPP_ = {
if (targetBin) {
targetBin.select();
return targetBin;
+ } else {
+ $._PPP_.updateEventPanel('Couldn\'t find or create a target bin.');
}
},
- importComps: function () {
+ importComps: function() {
var targetBin = $._PPP_.getPPPInsertionBin();
if (targetBin) {
- var filterString = "";
+ var filterString = '';
if (Folder.fs === 'Windows') {
- filterString = "All files:*.*";
+ filterString = 'All files:*.*';
}
- compNamesToImport = [];
-
- var aepToImport = File.openDialog("Choose After Effects project", // title
+ var compNamesToImport = [];
+ var aepToImport = File.openDialog(
+ 'Choose After Effects project', // title
filterString, // filter available files?
- false); // allow multiple?
+ false
+ ); // allow multiple?
if (aepToImport) {
- var importAll = confirm("Import all compositions in project?", false, "Import all?");
+ var importAll = confirm(
+ 'Import all compositions in project?',
+ false,
+ 'Import all?'
+ );
if (importAll) {
- var result = app.project.importAllAEComps(aepToImport.fsName, targetBin);
+ var result = app.project.importAllAEComps(
+ aepToImport.fsName,
+ 0,
+ targetBin
+ );
} else {
- var compName = prompt('Name of composition to import?',
+ var compName = prompt(
+ 'Name of composition to import?',
'',
- 'Which Comp to import');
+ 'Which Comp to import'
+ );
if (compName) {
compNamesToImport[0] = compName;
- var importAECompResult = app.project.importAEComps(aepToImport.fsName, compNamesToImport, targetBin);
+ var importAECompResult = app.project.importAEComps(
+ aepToImport.fsName,
+ compNamesToImport,
+ targetBin
+ );
} else {
- $._PPP_.updateEventPanel("Could not find Composition.");
+ $._PPP_.updateEventPanel('No composition specified.');
}
}
} else {
- $._PPP_.updateEventPanel("Could not open project.");
+ $._PPP_.updateEventPanel('Could not open project.');
}
} else {
- $._PPP_.updateEventPanel("Could not find or create target bin.");
+ $._PPP_.updateEventPanel('Could not find or create target bin.');
}
},
- consolidateProject: function () {
+ consolidateProject: function() {
var pmo = app.projectManager.options;
- if (app.project.sequences.length) {
+ if (app.project.sequences.numSequences) {
if (pmo) {
- var filterString = "";
+ var filterString = '';
if (Folder.fs === 'Windows') {
- filterString = "Output Presets:*.epr";
+ filterString = 'Output Presets:*.epr';
}
-
- var outFolder = Folder.selectDialog("Choose output directory.");
+ var outFolder = Folder.selectDialog('Choose output directory.');
if (outFolder) {
-
- var presetPath = "";
- var useSpecificPreset = confirm("Would you like to select an output preset?", false, "Are you sure...?");
+ var presetPath = '';
+ var useSpecificPreset = confirm(
+ 'Would you like to select an output preset?',
+ false,
+ 'Are you sure...?'
+ );
if (useSpecificPreset) {
- var useThisEPR = File.openDialog("Choose output preset (.epr file)", // title
+ var useThisEPR = File.openDialog(
+ 'Choose output preset (.epr file)', // title
filterString, // filter available files?
- false); // allow multiple?
+ false
+ ); // allow multiple?
if (useThisEPR) {
pmo.clipTranscoderOption = pmo.CLIP_TRANSCODE_MATCH_PRESET;
pmo.encoderPresetFilePath = useThisEPR.fsName;
+ } else {
+ $._PPP_.updateEventPanel('Couldn\'t find specified .epr file.');
}
} else {
pmo.clipTranscoderOption = pmo.CLIP_TRANSCODE_MATCH_SEQUENCE;
}
-
- var processAllSequences = confirm("Process all sequences? No = just the first sequence found.", true, "Process all?");
-
+ var processAllSequences = confirm(
+ 'Process all sequences? No = just the first sequence found.',
+ true,
+ 'Process all?'
+ );
if (processAllSequences) {
pmo.includeAllSequences = true;
} else {
@@ -1679,94 +2110,48 @@ $._PPP_ = {
if (errorList.length) {
for (var k = 0; k < errorList.length; k++) {
- $._PPP_.updateEventPanel(errorList[k][1]);
+ $._PPP_.updateEventPanel(errorList[k][0]);
}
} else {
- $._PPP_.updateEventPanel(app.project.name + " successfully processed to " + outFolder.fsName + ".");
+ $._PPP_.updateEventPanel(
+ app.project.name +
+ ' successfully processed to ' +
+ outFolder.fsName +
+ '.'
+ );
}
return result;
}
+ } else {
+ $._PPP_.updateEventPanel('Could not get Project Manager options.');
}
-
-
- }
- if (pmo) {
- var filterString = "";
- if (Folder.fs === 'Windows') {
- filterString = "Output Presets:*.epr";
- }
-
- var outFolder = Folder.selectDialog("Choose output directory.");
- if (outFolder) {
-
- var presetPath = "";
- var useSpecificPreset = confirm("Would you like to select an output preset?", false, "Are you sure...?");
- if (useSpecificPreset) {
- var useThisEPR = File.openDialog("Choose output preset (.epr file)", // title
- filterString, // filter available files?
- false); // allow multiple?
-
- if (useThisEPR) {
- pmo.clipTranscoderOption = pmo.CLIP_TRANSCODE_MATCH_PRESET;
- pmo.encoderPresetFilePath = useThisEPR.fsName;
- }
- } else {
- pmo.clipTranscoderOption = pmo.CLIP_TRANSCODE_MATCH_SEQUENCE;
- }
-
- var processAllSequences = confirm("Process all sequences? No = just the first sequence found.", true, "Process all?");
-
- if (processAllSequences) {
- pmo.includeAllSequences = true;
- } else {
- pmo.includeAllSequences = false;
- pmo.affectedSequences = [app.project.sequences[0]];
- }
-
- pmo.clipTransferOption = pmo.CLIP_TRANSFER_TRANSCODE;
- pmo.convertAECompsToClips = false;
- pmo.convertSyntheticsToClips = false;
- pmo.copyToPreventAlphaLoss = false;
- pmo.destinationPath = outFolder.fsName;
- pmo.excludeUnused = false;
- pmo.handleFrameCount = 0;
- pmo.includeConformedAudio = true;
- pmo.includePreviews = true;
- pmo.renameMedia = false;
-
- var result = app.projectManager.process(app.project);
- var errorList = app.projectManager.errors;
-
- if (errorList.length) {
- for (var k = 0; k < errorList.length; k++) {
- $._PPP_.updateEventPanel(errorList[k][1]);
- }
- } else {
- $._PPP_.updateEventPanel(app.project.name + " successfully processed to " + outFolder.fsName + ".");
- }
- return result;
- }
+ } else {
+ $._PPP_.updateEventPanel('No sequences available.');
}
},
- importMoGRT: function () {
+ importMoGRT: function() {
var activeSeq = app.project.activeSequence;
if (activeSeq) {
- var filterString = "";
+ var filterString = '';
if (Folder.fs === 'Windows') {
- filterString = "Motion Graphics Templates:*.mogrt";
+ filterString = 'Motion Graphics Templates:*.mogrt';
}
- var mogrtToImport = File.openDialog("Choose MoGRT", // title
+ var mogrtToImport = File.openDialog(
+ 'Choose MoGRT', // title
filterString, // filter available files?
- false); // allow multiple?
+ false
+ ); // allow multiple?
if (mogrtToImport) {
var targetTime = activeSeq.getPlayerPosition();
var vidTrackOffset = 0;
var audTrackOffset = 0;
- var newTrackItem = activeSeq.importMGT(mogrtToImport.fsName,
+ var newTrackItem = activeSeq.importMGT(
+ mogrtToImport.fsName,
targetTime.ticks,
vidTrackOffset,
- audTrackOffset);
+ audTrackOffset
+ );
if (newTrackItem) {
var moComp = newTrackItem.getMGTComponent();
if (moComp) {
@@ -1774,28 +2159,30 @@ $._PPP_ = {
for (var z = 0; z < params.numItems; z++) {
var thisParam = params[0];
}
- var srcTextParam = params.getParamForDisplayName("Main Title");
+ var srcTextParam = params.getParamForDisplayName('Main Title');
if (srcTextParam) {
var val = srcTextParam.getValue();
- srcTextParam.setValue("New value set by PProPanel!");
+ srcTextParam.setValue('New value set by PProPanel!');
}
}
}
} else {
- app.setSDKEventMessage('Unable to import ' + mogrtToImport.fsName + '.', 'error');
+ $._PPP_.updateEventPanel(
+ 'Unable to import ' + mogrtToImport.fsName + '.'
+ );
}
} else {
- app.setSDKEventMessage('No active sequence.');
+ $._PPP_.updateEventPanel('No active sequence.');
}
},
- reportCurrentProjectSelection: function () {
- var viewIDs = app.getProjectViewIDs(); // sample code optimized for a single open project
- viewSelection = app.getProjectViewSelection(viewIDs[0]);
+ reportCurrentProjectSelection: function() {
+ var viewIDs = app.getProjectViewIDs();
+ var viewSelection = app.getProjectViewSelection(viewIDs[0]); // sample code optimized for a single open project
$._PPP_.projectPanelSelectionChanged(viewSelection, viewIDs[0]);
},
- randomizeProjectSelection: function () {
+ randomizeProjectSelection: function() {
var viewIDs = app.getProjectViewIDs();
var firstProject = app.getProjectFromViewID(viewIDs[0]);
var arrayOfRandomProjectItems = [];
@@ -1811,7 +2198,7 @@ $._PPP_ = {
}
},
- setAllProjectItemsOnline: function (startingBin) {
+ setAllProjectItemsOnline: function(startingBin) {
for (var k = 0; k < startingBin.children.numItems; k++) {
var currentChild = startingBin.children[k];
if (currentChild) {
@@ -1820,36 +2207,51 @@ $._PPP_ = {
} else if (currentChild.isOffline()) {
currentChild.changeMediaPath(currentChild.getMediaPath(), true);
if (currentChild.isOffline()) {
- $._PPP_.updateEventPanel("Failed to bring \'" + currentChild.name + "\' online.");
+ $._PPP_.updateEventPanel(
+ 'Failed to bring "' + currentChild.name + '" online.'
+ );
} else {
- $._PPP_.updateEventPanel("\'" + currentChild.name + "\' is once again online.");
+ $._PPP_.updateEventPanel(
+ '"' + currentChild.name + '" is once again online.'
+ );
}
}
}
}
},
- setAllOnline: function () {
+ setAllOnline: function() {
var startingBin = app.project.rootItem;
$._PPP_.setAllProjectItemsOnline(startingBin);
},
- setOffline: function () {
+ setOffline: function() {
var viewIDs = app.getProjectViewIDs();
for (var a = 0; a < app.projects.numProjects; a++) {
var currentProject = app.getProjectFromViewID(viewIDs[a]);
if (currentProject) {
- if (currentProject.documentID === app.project.documentID) { // We're in the right project!
+ if (currentProject.documentID === app.project.documentID) {
+ // We're in the right project!
var selectedItems = app.getProjectViewSelection(viewIDs[a]);
- for (var b = 0; b < selectedItems.length; b++) {
- var currentItem = selectedItems[b];
- if (currentItem) {
- if ((!currentItem.isSequence()) && (currentItem.type !== ProjectItemType.BIN)) { // For every selected item which isn't a bin or sequence...
- if (currentItem.isOffline()) {
- $._PPP_.updateEventPanel("\'" + currentItem.name + "\'was already offline.");
- } else {
- var result = currentItem.setOffline();
- $._PPP_.updateEventPanel("\'" + currentItem.name + "\' is now offline.");
+ if (selectedItems && selectedItems.length > 0) {
+ for (var b = 0; b < selectedItems.length; b++) {
+ var currentItem = selectedItems[b];
+ if (currentItem) {
+ if (
+ !currentItem.isSequence() &&
+ currentItem.type !== ProjectItemType.BIN
+ ) {
+ // For every selected item which isn't a bin or sequence...
+ if (currentItem.isOffline()) {
+ $._PPP_.updateEventPanel(
+ '"' + currentItem.name + '" was already offline.'
+ );
+ } else {
+ var result = currentItem.setOffline();
+ $._PPP_.updateEventPanel(
+ '"' + currentItem.name + '" is now offline.'
+ );
+ }
}
}
}
@@ -1859,156 +2261,261 @@ $._PPP_ = {
}
},
- updateFrameRate: function () {
+ updateFrameRate: function() {
var item = app.project.rootItem.children[0];
if (item) {
- if ((item.type == ProjectItemType.FILE) || (item.type == ProjectItemType.CLIP)) {
+ if (
+ item.type == ProjectItemType.FILE ||
+ item.type == ProjectItemType.CLIP
+ ) {
// If there is an item, and it's either a clip or file...
item.setOverrideFrameRate(23.976);
} else {
- $._PPP_.updateEventPanel('You cannot override the frame rate of bins or sequences.');
+ $._PPP_.updateEventPanel(
+ 'You cannot override the frame rate of bins or sequences.'
+ );
}
} else {
- $._PPP_.updateEventPanel("No project items found.");
+ $._PPP_.updateEventPanel('No project items found.');
}
},
- onItemAddedToProject: function (whichProject, addedProjectItem) {
- var msg = addedProjectItem.name + " was added to " + whichProject + "."
+ onItemAddedToProject: function(whichProject, addedProjectItem) {
+ var msg = addedProjectItem.name + ' was added to ' + whichProject + '.';
$._PPP_.updateEventPanel(msg);
},
- registerItemAddedFxn: function () {
+ registerItemAddedFxn: function() {
app.onItemAddedToProjectSuccess = $._PPP_.onItemAddedToProject;
},
- myOnProjectChanged: function (documentID) {
+ myOnProjectChanged: function(documentID) {
var msg = 'Project with ID ' + documentID + ' Changed.';
- // Commented out, as this happens a LOT.
- // $._PPP_.updateEventPanel(msg);
+ $._PPP_.updateEventPanel(msg);
},
- registerProjectChangedFxn: function () {
+ registerProjectChangedFxn: function() {
app.bind('onProjectChanged', $._PPP_.myOnProjectChanged);
},
- confirmPProHostVersion: function () {
+ confirmPProHostVersion: function() {
var version = parseFloat(app.version);
- if (version < 12.1) {
- $._PPP_.updateEventPanel("Note: PProPanel relies on features added in 12.1, but is currently running in " + version + ".");
+ if (version < 14.0) {
+ $._PPP_.updateEventPanel(
+ 'Note: PProPanel relies on features added in 14.0, but is currently running in ' +
+ version +
+ '.'
+ );
}
},
- changeMarkerColors: function () {
+ changeMarkerColors: function() {
if (app.project.rootItem.children.numItems > 0) {
var projectItem = app.project.rootItem.children[0]; // assumes first item is footage.
if (projectItem) {
- if (projectItem.type == ProjectItemType.CLIP ||
- projectItem.type == ProjectItemType.FILE) {
-
- markers = projectItem.getMarkers();
-
+ if (
+ projectItem.type == ProjectItemType.CLIP ||
+ projectItem.type == ProjectItemType.FILE
+ ) {
+ var markers = projectItem.getMarkers();
if (markers) {
var markerCount = markers.numMarkers;
-
if (markerCount) {
- for (var thisMarker = markers.getFirstMarker(); thisMarker !== undefined; thisMarker = markers.getNextMarker(thisMarker)) {
+ for (
+ var thisMarker = markers.getFirstMarker();
+ thisMarker !== undefined;
+ thisMarker = markers.getNextMarker(thisMarker)
+ ) {
var oldColor = thisMarker.getColorByIndex();
var newColor = oldColor + 1;
if (newColor > 7) {
+ // clamp to valid values
newColor = 0;
}
thisMarker.setColorByIndex(newColor);
- $._PPP_.updateEventPanel("Changed color of marker named \'" + thisMarker.name + "\' from " + oldColor + " to " + newColor + ".");
+ $._PPP_.updateEventPanel(
+ 'Changed color of marker named "' + thisMarker.name + '" from ' + oldColor + ' to ' + newColor + '.'
+ );
}
}
}
} else {
- $._PPP_.updateEventPanel("Can only add markers to footage items.");
+ $._PPP_.updateEventPanel('Can only add markers to footage items.');
}
} else {
- $._PPP_.updateEventPanel("Could not find first projectItem.");
+ $._PPP_.updateEventPanel('Could not find first projectItem.');
}
} else {
- $._PPP_.updateEventPanel("Project is empty.");
+ $._PPP_.updateEventPanel('Project is empty.');
}
},
- changeSeqTimeCodeDisplay: function () {
- if (app.project.activeSequence) {
+ changeSeqTimeCodeDisplay: function() {
+ var seq = app.project.activeSequence;
+ if (seq) {
var currentSeqSettings = app.project.activeSequence.getSettings();
if (currentSeqSettings) {
var oldVidSetting = currentSeqSettings.videoDisplayFormat;
+ var timeAsText = seq
+ .getPlayerPosition()
+ .getFormatted(
+ currentSeqSettings.videoFrameRate,
+ app.project.activeSequence.videoDisplayFormat
+ );
+
currentSeqSettings.videoDisplayFormat = oldVidSetting + 1;
if (currentSeqSettings.videoDisplayFormat > TIMEDISPLAY_48Timecode) {
+ // clamp to valid values
currentSeqSettings.videoDisplayFormat = TIMEDISPLAY_24Timecode;
}
app.project.activeSequence.setSettings(currentSeqSettings);
- $._PPP_.updateEventPanel("Changed timecode display format for \'" + app.project.activeSequence.name + "\'.");
+ $._PPP_.updateEventPanel(
+ 'Changed timecode display format for "' +
+ app.project.activeSequence.name +
+ '".'
+ );
}
} else {
- $._PPP_.updateEventPanel("No active sequence.");
+ $._PPP_.updateEventPanel('No active sequence.');
}
},
- myActiveSequenceChangedFxn: function () {
- $._PPP_.updateEventPanel("Active sequence is now " + app.project.activeSequence.name + ".");
+ myActiveSequenceChangedFxn: function() {
+ $._PPP_.updateEventPanel(
+ app.project.activeSequence.name + ' changed, in some way.'
+ );
},
- myActiveSequenceSelectionChangedFxn: function () {
- var sel = app.project.activeSequence.getSelection();
- $._PPP_.updateEventPanel('Current active sequence = ' + app.project.activeSequence.name + '.');
- $._PPP_.updateEventPanel(sel.length + ' track items selected.');
- for (var i = 0; i < sel.length; i++) {
- if (sel[i].name !== 'anonymous') {
- $._PPP_.updateEventPanel('Selected item ' + (i + 1) + ' == ' + sel[i].name + '.');
+ mySequenceActivatedFxn: function() {
+ $._PPP_.updateEventPanel(
+ 'Active sequence is now ' + app.project.activeSequence.name + '.'
+ );
+ },
+
+ myActiveSequenceSelectionChangedFxn: function() {
+ var seq = app.project.activeSequence;
+ if (seq) {
+ var sel = seq.getSelection();
+ if (sel && sel !== 'Connection to object lost') {
+ $._PPP_.updateEventPanel(
+ sel.length +
+ ' track items selected in ' +
+ app.project.activeSequence.name +
+ '.'
+ );
+ for (var i = 0; i < sel.length; i++) {
+ if (sel[i].name !== 'anonymous') {
+ $._PPP_.updateEventPanel(
+ 'Selected item ' + (i + 1) + ' == ' + sel[i].name + '.'
+ );
+ }
+ }
+ } else {
+ $._PPP_.updateEventPanel('No clips selected.');
}
+ } else {
+ $._PPP_.updateEventPanel('No active sequence.');
}
},
- registerActiveSequenceChangedFxn: function () {
- var success = app.bind("onActiveSequenceChanged", $._PPP_.myActiveSequenceChangedFxn);
+ myActiveSequenceStructureChangedFxn: function() {
+ $._PPP_.updateEventPanel(
+ 'Something in ' + app.project.activeSequence.name + 'changed.'
+ );
},
- registerSequenceSelectionChangedFxn: function () {
- var success = app.bind('onActiveSequenceSelectionChanged', $._PPP_.myActiveSequenceSelectionChangedFxn);
+ registerActiveSequenceStructureChangedFxn: function() {
+ var success = app.bind(
+ 'onActiveSequenceStructureChanged',
+ $._PPP_.myActiveSequenceStructureChangedFxn
+ );
},
- enableNewWorldScripting: function () {
+ registerActiveSequenceChangedFxn: function() {
+ var success = app.bind(
+ 'onActiveSequenceChanged',
+ $._PPP_.myActiveSequenceChangedFxn
+ );
+ },
+
+ registerSequenceSelectionChangedFxn: function() {
+ var success = app.bind(
+ 'onActiveSequenceSelectionChanged',
+ $._PPP_.myActiveSequenceSelectionChangedFxn
+ );
+ },
+
+ registerSequenceActivatedFxn: function() {
+ var success = app.bind(
+ 'onSequenceActivated',
+ $._PPP_.mySequenceActivatedFxn
+ );
+ },
+
+ enableNewWorldScripting: function() {
app.enableQE();
- var previousNWValue = qe.getDebugDatabaseEntry("ScriptLayerPPro.EnableNewWorld");
- var previousInternalDOMValue = qe.getDebugDatabaseEntry("dvascripting.EnabledInternalDOM");
- if ((previousNWValue === 'true') && (previousInternalDOMValue === 'true')) {
- qe.setDebugDatabaseEntry("ScriptLayerPPro.EnableNewWorld", "false");
- qe.setDebugDatabaseEntry("dvascripting.EnabledInternalDOM", "false");
- $._PPP_.updateEventPanel("ScriptLayerPPro.EnableNewWorld and dvascripting.EnabledInternalDOM are now OFF.");
+ var previousNWValue = qe.getDebugDatabaseEntry(
+ 'ScriptLayerPPro.EnableNewWorld'
+ );
+ var previousInternalDOMValue = qe.getDebugDatabaseEntry(
+ 'dvascripting.EnabledInternalDOM'
+ );
+ if (previousNWValue === 'true' && previousInternalDOMValue === 'true') {
+ qe.setDebugDatabaseEntry('ScriptLayerPPro.EnableNewWorld', 'false');
+ qe.setDebugDatabaseEntry('dvascripting.EnabledInternalDOM', 'false');
+ $._PPP_.updateEventPanel(
+ 'ScriptLayerPPro.EnableNewWorld and dvascripting.EnabledInternalDOM are now OFF.'
+ );
} else {
- qe.setDebugDatabaseEntry("ScriptLayerPPro.EnableNewWorld", "true");
- qe.setDebugDatabaseEntry("dvascripting.EnabledInternalDOM", "true");
- $._PPP_.updateEventPanel("ScriptLayerPPro.EnableNewWorld and dvascripting.EnabledInternalDOM are now ON.");
+ qe.setDebugDatabaseEntry('ScriptLayerPPro.EnableNewWorld', 'true');
+ qe.setDebugDatabaseEntry('dvascripting.EnabledInternalDOM', 'true');
+ $._PPP_.updateEventPanel(
+ 'ScriptLayerPPro.EnableNewWorld and dvascripting.EnabledInternalDOM are now ON.'
+ );
}
},
- insertOrAppendToTopTracks: function () {
+ forceLogfilesOn: function() {
+ app.enableQE();
+ var previousLogFilesValue = qe.getDebugDatabaseEntry(
+ 'CreateLogFilesThatDoNotExist'
+ );
+
+ if (previousLogFilesValue === 'true') {
+ $._PPP_.updateEventPanel('Force create Log files was already ON.');
+ } else {
+ qe.setDebugDatabaseEntry('CreateLogFilesThatDoNotExist', 'true');
+ $._PPP_.updateEventPanel('Set Force create Log files to ON.');
+ }
+ },
+
+ insertOrAppendToTopTracks: function() {
var seq = app.project.activeSequence;
if (seq) {
var first = app.project.rootItem.children[0];
if (first) {
var time = seq.getPlayerPosition();
- var newClip = seq.insertClip(first, time, (seq.videoTracks.numTracks - 1), (seq.audioTracks.numTracks - 1));
+ var newClip = seq.insertClip(
+ first,
+ time,
+ seq.videoTracks.numTracks - 1,
+ seq.audioTracks.numTracks - 1
+ );
if (newClip) {
- $._PPP_.updateEventPanel("Inserted " + newClip.name + ", into " + seq.name + ".");
+ $._PPP_.updateEventPanel(
+ 'Inserted ' + newClip.name + ', into ' + seq.name + '.'
+ );
}
} else {
- $._PPP_.updateEventPanel("Couldn't locate first projectItem.");
+ $._PPP_.updateEventPanel('Couldn\'t locate first projectItem.');
}
} else {
- $._PPP_.updateEventPanel("no active sequence.");
+ $._PPP_.updateEventPanel('no active sequence.');
}
},
- closeAllProjectsOtherThanActiveProject: function () {
+ closeAllProjectsOtherThanActiveProject: function() {
var viewIDs = app.getProjectViewIDs();
var closeTheseProjects = [];
for (var a = 0; a < viewIDs.length; a++) {
@@ -2017,19 +2524,27 @@ $._PPP_ = {
closeTheseProjects[a] = thisProj;
}
}
- // Why do this afterward? Because if we close projects in that loop, we change the active project. :)
+ // Why do this afterward? Because if we close projects in that loop [above], we change the active project, and scare the user. :)
for (var b = 0; b < closeTheseProjects.length; b++) {
- $._PPP_.updateEventPanel("Closed " + closeTheseProjects[b].name);
+ $._PPP_.updateEventPanel('Closed ' + closeTheseProjects[b].name);
closeTheseProjects[b].closeDocument();
}
},
- countAdjustmentLayersInBin: function (parentItem, arrayOfAdjustmentLayerNames, foundSoFar) {
+ countAdjustmentLayersInBin: function(
+ parentItem,
+ arrayOfAdjustmentLayerNames,
+ foundSoFar
+ ) {
for (var j = 0; j < parentItem.children.numItems; j++) {
var currentChild = parentItem.children[j];
if (currentChild) {
if (currentChild.type == ProjectItemType.BIN) {
- $._PPP_.countAdjustmentLayersInBin(currentChild, arrayOfAdjustmentLayerNames, foundSoFar); // warning; recursion!
+ $._PPP_.countAdjustmentLayersInBin(
+ currentChild,
+ arrayOfAdjustmentLayerNames,
+ foundSoFar
+ ); // warning; recursion!
} else {
if (currentChild.isAdjustmentLayer()) {
arrayOfAdjustmentLayerNames[foundSoFar] = currentChild.name;
@@ -2038,17 +2553,25 @@ $._PPP_ = {
}
}
}
+ $._PPP_.updateEventPanel(
+ foundSoFar + ' adjustment layers found in ' + app.project.name + '.'
+ );
},
- findAllAdjustmentLayersInProject: function () {
+ findAllAdjustmentLayersInProject: function() {
var arrayOfAdjustmentLayerNames = [];
var foundSoFar = 0;
var startingBin = app.project.rootItem;
- $._PPP_.countAdjustmentLayersInBin(startingBin, arrayOfAdjustmentLayerNames, foundSoFar);
+ $._PPP_.countAdjustmentLayersInBin(
+ startingBin,
+ arrayOfAdjustmentLayerNames,
+ foundSoFar
+ );
+
if (arrayOfAdjustmentLayerNames.length) {
var remainingArgs = arrayOfAdjustmentLayerNames.length;
- var message = remainingArgs + " adjustment layers found: ";
+ var message = remainingArgs + ' adjustment layers found: ';
for (var i = 0; i < arrayOfAdjustmentLayerNames.length; i++) {
message += arrayOfAdjustmentLayerNames[i];
@@ -2057,143 +2580,189 @@ $._PPP_ = {
message += ', ';
}
if (remainingArgs === 1) {
- message += ", and ";
+ message += ', and ';
}
if (remainingArgs === 0) {
- message += ".";
+ message += '.';
}
}
$._PPP_.updateEventPanel(message);
} else {
- $._PPP_.updateEventPanel("No adjustment layers found in " + app.project.name + ".");
+ $._PPP_.updateEventPanel(
+ 'No adjustment layers found in ' + app.project.name + '.'
+ );
}
},
- consolidateDuplicates: function () {
- result = app.project.consolidateDuplicates();
- $._PPP_.updateEventPanel("Duplicates consolidated in " + app.project.name + ".");
+ consolidateDuplicates: function() {
+ var result = app.project.consolidateDuplicates();
+ $._PPP_.updateEventPanel(
+ 'Duplicates consolidated in ' + app.project.name + '.'
+ );
},
- closeAllSequences: function () {
+ closeAllSequences: function() {
var seqList = app.project.sequences;
- for (var a = 0; a < seqList.numSequences; a++) {
- var currentSeq = seqList[a];
- if (currentSeq) {
- currentSeq.close();
- } else {
- $._PPP_.updateEventPanel("No sequences from " + app.project.name + " were open.");
+ if (seqList.numSequences) {
+ for (var a = 0; a < seqList.numSequences; a++) {
+ var currentSeq = seqList[a];
+ if (currentSeq) {
+ currentSeq.close();
+ } else {
+ $._PPP_.updateEventPanel(
+ 'No sequences from ' + app.project.name + ' were open.'
+ );
+ }
}
+ } else {
+ $._PPP_.updateEventPanel(
+ 'No sequences found in ' + app.project.name + '.'
+ );
}
},
- dumpAllPresets: function () {
- var desktopPath = new File("~/Desktop");
- var outputFileName = desktopPath.fsName + $._PPP_.getSep() + 'available_presets.txt';
- var selectedPreset = undefined;
- var selectedExporter = undefined;
+ dumpAllPresets: function() {
+ var desktopPath = new File('~/Desktop');
+ var outputFileName =
+ desktopPath.fsName + $._PPP_.getSep() + 'available_presets.txt';
var exporters = app.encoder.getExporters();
-
var outFile = new File(outputFileName);
+ outFile.encoding = 'UTF8';
- outFile.encoding = "UTF8";
- outFile.open("w", "TEXT", "????");
+ outFile.open('w', 'TEXT', '????');
for (var i = 0; i < exporters.length; i++) {
var exporter = exporters[i];
if (exporter) {
outFile.writeln('-----------------------------------------------');
- outFile.writeln(i + ':' + exporter.name + ' : ' + exporter.classID + ' : ' + exporter.fileType);
+ outFile.writeln(
+ i +
+ ':' +
+ exporter.name +
+ ' : ' +
+ exporter.classID +
+ ' : ' +
+ exporter.fileType
+ );
var presets = exporter.getPresets();
if (presets) {
- outFile.writeln(presets.length + ' presets found');
+ outFile.writeln(presets.length + ' presets found.');
+ outFile.writeln('+++++++++');
+ outFile.writeln('+++++++++');
for (var j = 0; j < presets.length; j++) {
var preset = presets[j];
if (preset) {
- outFile.writeln('matchName: ' + preset.matchName + '(' + preset.name + ')');
- if (preset.name.indexOf('TQM') > -1) {
- selectedPreset = preset;
- selectedExporter = exporter;
- outFile.writeln('selected preset = ' + selectedExporter.name + ' : ' + selectedPreset.name);
- selectedPreset.writeToFile(desktopPath.fsName + $._PPP_.getSep() + preset.name + ".epr");
- $._PPP_.updateEventPanel("List of available presets saved to desktop as \'available_presets.txt\'");
- }
+ outFile.writeln(
+ 'matchName: ' + preset.matchName + '(' + preset.name + ')'
+ );
+ outFile.writeln('+++++++++');
}
}
}
}
}
+ $._PPP_.updateEventPanel(
+ 'List of available presets saved to desktop as "available_presets.txt".'
+ );
desktopPath.close();
outFile.close();
},
- reportSequenceVRSettings: function () {
+ reportSequenceVRSettings: function() {
var seq = app.project.activeSequence;
if (seq) {
var settings = seq.getSettings();
if (settings) {
- $._PPP_.updateEventPanel("====================================================");
- $._PPP_.updateEventPanel("VR Settings for \'" + seq.name + "\':");
- $._PPP_.updateEventPanel("");
- $._PPP_.updateEventPanel(" Horizontal captured view: " + settings.vrHorzCapturedView);
- $._PPP_.updateEventPanel(" Vertical captured view: " + settings.vrVertCapturedView);
- $._PPP_.updateEventPanel(" Layout: " + settings.Layout);
- $._PPP_.updateEventPanel(" Projection: " + settings.vrProjection);
- $._PPP_.updateEventPanel("");
- $._PPP_.updateEventPanel("====================================================");
- }
- }
- },
-
- openProjectItemInSource: function () {
- var viewIDs = app.getProjectViewIDs();
- if (viewIDs) {
- for (var a = 0; a < app.projects.numProjects; a++) {
- var currentProject = app.getProjectFromViewID(viewIDs[a]);
- if (currentProject) {
- if (currentProject.documentID === app.project.documentID) { // We're in the right project!
- var selectedItems = app.getProjectViewSelection(viewIDs[a]);
- for (var b = 0; b < selectedItems.length; b++) {
- var currentItem = selectedItems[b];
- if (currentItem) {
- if (currentItem.type !== ProjectItemType.BIN) { // For every selected item which isn't a bin or sequence...
- app.sourceMonitor.openProjectItem(currentItem);
- }
- } else {
- $._PPP_.updateEventPanel("No item available.");
- }
- }
- }
- } else {
- $._PPP_.updateEventPanel("No project available.");
- }
+ $._PPP_.updateEventPanel(
+ '===================================================='
+ );
+ $._PPP_.updateEventPanel('VR Settings for "' + seq.name + '":');
+ $._PPP_.updateEventPanel('');
+ $._PPP_.updateEventPanel('');
+ $._PPP_.updateEventPanel(
+ ' Horizontal captured view: ' + settings.vrHorzCapturedView
+ );
+ $._PPP_.updateEventPanel(
+ ' Vertical captured view: ' + settings.vrVertCapturedView
+ );
+ $._PPP_.updateEventPanel(' Layout: ' + settings.vrLayout);
+ $._PPP_.updateEventPanel(' Projection: ' + settings.vrProjection);
+ $._PPP_.updateEventPanel('');
+ $._PPP_.updateEventPanel('');
+ $._PPP_.updateEventPanel(
+ '===================================================='
+ );
}
} else {
- $._PPP_.updateEventPanel("No view IDs available.");
+ $._PPP_.updateEventPanel('No active sequence.');
}
},
- reinterpretFootage: function () {
+ openProjectItemInSource: function() {
var viewIDs = app.getProjectViewIDs();
if (viewIDs) {
for (var a = 0; a < app.projects.numProjects; a++) {
var currentProject = app.getProjectFromViewID(viewIDs[a]);
if (currentProject) {
- if (currentProject.documentID === app.project.documentID) { // We're in the right project!
+ if (currentProject.documentID === app.project.documentID) {
+ // We're in the right project!
var selectedItems = app.getProjectViewSelection(viewIDs[a]);
if (selectedItems) {
for (var b = 0; b < selectedItems.length; b++) {
var currentItem = selectedItems[b];
if (currentItem) {
- if ((currentItem.type !== ProjectItemType.BIN) &&
- (currentItem.isSequence() === false)) {
+ if (currentItem.type !== ProjectItemType.BIN) {
+ // For every selected item which isn't a bin or sequence...
+ app.sourceMonitor.openProjectItem(currentItem);
+ }
+ } else {
+ $._PPP_.updateEventPanel('No item available.');
+ }
+ }
+ }
+ }
+ } else {
+ $._PPP_.updateEventPanel('No project available.');
+ }
+ }
+ } else {
+ $._PPP_.updateEventPanel('No view IDs available.');
+ }
+ },
+
+ reinterpretFootage: function() {
+ var viewIDs = app.getProjectViewIDs();
+ if (viewIDs) {
+ for (var a = 0; a < app.projects.numProjects; a++) {
+ var currentProject = app.getProjectFromViewID(viewIDs[a]);
+ if (currentProject) {
+ if (currentProject.documentID === app.project.documentID) {
+ // We're in the right project!
+ var selectedItems = app.getProjectViewSelection(viewIDs[a]);
+ if (selectedItems.length) {
+ for (var b = 0; b < selectedItems.length; b++) {
+ var currentItem = selectedItems[b];
+ if (currentItem) {
+ if (
+ currentItem.type !== ProjectItemType.BIN &&
+ currentItem.isSequence() === false
+ ) {
var interp = currentItem.getFootageInterpretation();
if (interp) {
- // Note: I made this something terrible, so the change is apparent.
interp.frameRate = 17.868;
interp.pixelAspectRatio = 1.2121;
currentItem.setFootageInterpretation(interp);
+ $._PPP_.updateEventPanel(
+ 'Changed frame rate and PAR for ' +
+ currentItem.name +
+ '.'
+ );
} else {
- $._PPP_.updateEventPanel("Unable to get interpretation for " + currentItem.name + ".");
+ $._PPP_.updateEventPanel(
+ 'Unable to get interpretation for ' +
+ currentItem.name +
+ '.'
+ );
}
var mapping = currentItem.getAudioChannelMapping;
if (mapping) {
@@ -2202,82 +2771,95 @@ $._PPP_ = {
mapping.setMappingForChannel(0, 4); // 1st param = channel index, 2nd param = source index
mapping.setMappingForChannel(1, 5);
currentItem.setAudioChannelMapping(mapping); // submit changed mapping object
+ $._PPP_.updateEventPanel(
+ 'Modified audio channel type and channel mapping for ' +
+ currentItem.name +
+ '.'
+ );
}
}
} else {
- $._PPP_.updateEventPanel("No project item available.");
+ $._PPP_.updateEventPanel('No project item available.');
}
}
} else {
- $._PPP_.updateEventPanel("No items selected.");
+ $._PPP_.updateEventPanel('No items selected.');
}
}
} else {
- $._PPP_.updateEventPanel("No project available.");
+ $._PPP_.updateEventPanel('No project available.');
}
}
} else {
- $._PPP_.updateEventPanel("No view IDs available.");
+ $._PPP_.updateEventPanel('No view IDs available.');
}
},
- createSubSequence: function () {
+ createSubSequence: function() {
+ /* Behavioral Note
- /* Behavioral Note
-
- createSubSequence() uses track targeting to select clips when there is
- no current clip selection, in the sequence. To create a subsequence with
- clips on tracks that are currently NOT targeted, either select some clips
- (on any track), or temporarily target all desired tracks.
+ createSubSequence() uses track targeting to select clips when there is
+ no current clip selection, in the sequence. To create a subsequence with
+ clips on tracks that are currently NOT targeted, either select some clips
+ (on any track), or temporarily target all desired tracks.
*/
var activeSequence = app.project.activeSequence;
if (activeSequence) {
- var foundTarget = false;
- for (var a = 0;
- (a < activeSequence.videoTracks.numTracks) && (foundTarget === false); a++) {
- var vTrack = activeSequence.videoTracks[a];
- if (vTrack) {
- if (vTrack.isTargeted()) {
- foundTarget = true;
- }
+ var targetTrackFound = false;
+ var cloneAnyway = true;
+ for (
+ var a = 0;
+ a < activeSequence.videoTracks.numTracks && targetTrackFound === false;
+ a++
+ ) {
+ if (activeSequence.videoTracks[a].isTargeted()) {
+ targetTrackFound = true;
}
}
- // If no targeted track was found, just target the zero-th track, for demo purposes
- if (foundTarget === false) {
- activeSequence.videotracks[0].setTargeted(true, true);
+ // If no targeted track was found, just target the first (zero-th) track, for demo purposes
+ if (targetTrackFound === false) {
+ activeSequence.videoTracks[0].setTargeted(true, true);
}
-
- var cloneAnyway = true;
- if ((activeSequence.getInPoint() == NOT_SET) && (activeSequence.getOutPoint() == NOT_SET)) {
- cloneAnyway = confirm("No in or out points set; clone entire sequence?", false, "Clone the whole thing?");
+ if (
+ activeSequence.getInPoint() === NOT_SET &&
+ activeSequence.getOutPoint() === NOT_SET
+ ) {
+ cloneAnyway = confirm(
+ 'No in or out points set; clone entire sequence?',
+ false,
+ 'Clone the whole thing?'
+ );
}
if (cloneAnyway) {
- var ignoreMapping = confirm("Ignore track mapping?", false, "Ignore track mapping?");
+ var ignoreMapping = confirm(
+ 'Ignore track mapping?',
+ false,
+ 'Ignore track mapping?'
+ );
var newSeq = activeSequence.createSubsequence(ignoreMapping);
// rename newSeq here, as desired.
}
} else {
- $._PPP_.updateEventPanel("No active sequence.");
+ $._PPP_.updateEventPanel('No active sequence.');
}
},
- selectAllRetimedClips: function () {
+ selectAllRetimedClips: function() {
var activeSeq = app.project.activeSequence;
var numRetimedClips = 0;
if (activeSeq) {
var trackGroups = [activeSeq.audioTracks, activeSeq.videoTracks];
- var trackGroupNames = ["audioTracks", "videoTracks"];
+ var trackGroupNames = ['audioTracks', 'videoTracks'];
var updateUI = true;
-
- for (var gi = 0; gi < 2; gi++) {
- group = trackGroups[gi];
- for (var ti = 0; ti < group.numTracks; ti++) {
- var track = group[ti];
+ for (var groupIndex = 0; groupIndex < 2; groupIndex++) {
+ var group = trackGroups[groupIndex];
+ for (var trackIndex = 0; trackIndex < group.numTracks; trackIndex++) {
+ var track = group[trackIndex];
var clips = track.clips;
- for (var ci = 0; ci < clips.numTracks; ci++) {
- var clip = clips[ci];
+ for (var clipIndex = 0; clipIndex < clips.numItems; clipIndex++) {
+ var clip = clips[clipIndex];
if (clip.getSpeed() !== 1) {
clip.setSelected(true, updateUI);
numRetimedClips++;
@@ -2285,24 +2867,29 @@ $._PPP_ = {
}
}
}
- $._PPP_.updateEventPanel(numRetimedClips + " retimed clips found.");
+ $._PPP_.updateEventPanel(numRetimedClips + ' retimed clips found.');
} else {
- $._PPP_.updateEventPanel("No active sequence.");
+ $._PPP_.updateEventPanel('No active sequence.');
}
},
- selectReversedClips: function () {
+ selectReversedClips: function() {
var sequence = app.project.activeSequence;
var numReversedClips = 0;
if (sequence) {
var trackGroups = [sequence.audioTracks, sequence.videoTracks];
- var trackGroupNames = ["audioTracks", "videoTracks"];
+ var trackGroupNames = ['audioTracks', 'videoTracks'];
var updateUI = true;
- for (var gi = 0; gi < 2; gi++) {
- for (var ti = 0; ti < group.numTracks; ti++) {
- for (var ci = 0; ci < group[ti].clips.numTracks; ci++) {
- var clip = group[ti].clips[ci];
+ for (var groupIndex = 0; groupIndex < 2; groupIndex++) {
+ var group = trackGroups[groupIndex];
+ for (var trackIndex = 0; trackIndex < group.numTracks; trackIndex++) {
+ for (
+ var clipIndex = 0;
+ clipIndex < group[trackIndex].clips.numItems;
+ clipIndex++
+ ) {
+ var clip = group[trackIndex].clips[clipIndex];
var isReversed = clip.isSpeedReversed();
if (isReversed) {
clip.setSelected(isReversed, updateUI);
@@ -2311,73 +2898,304 @@ $._PPP_ = {
}
}
}
- $._PPP_.updateEventPanel(numReversedClips + " reversed clips found.");
+ $._PPP_.updateEventPanel(numReversedClips + ' reversed clips found.');
} else {
- $._PPP_.updateEventPanel("No active sequence.");
+ $._PPP_.updateEventPanel('No active sequence.');
}
},
- logConsoleOutput: function () {
+ logConsoleOutput: function() {
app.enableQE();
- var logFileName = "PPro_Console_output.txt"
- var outFolder = Folder.selectDialog("Where do you want to save the log file?");
+ var logFileName = 'PPro_Console_output.txt';
+ var outFolder = Folder.selectDialog(
+ 'Where do you want to save the log file?'
+ );
if (outFolder) {
var entireOutputPath = outFolder.fsName + $._PPP_.getSep() + logFileName;
- var result = qe.executeConsoleCommand("con.openlog " + entireOutputPath);
- $._PPP_.updateEventPanel("Log opened at " + entireOutputPath + ".");
+ var result = qe.executeConsoleCommand('con.openlog ' + entireOutputPath);
+ $._PPP_.updateEventPanel('Log opened at ' + entireOutputPath + '.');
+ } else {
+ $._PPP_.updateEventPanel('No output folder selected.');
}
},
- closeLog: function () {
+ closeLog: function() {
app.enableQE();
- qe.executeConsoleCommand("con.closelog");
+ qe.executeConsoleCommand('con.closelog');
},
- stitch: function (presetPath) {
+ stitch: function(presetPath) {
var viewIDs = app.getProjectViewIDs();
- var allPathsToStitch = "";
+ var allPathsToStitch = '';
for (var a = 0; a < app.projects.numProjects; a++) {
var currentProject = app.getProjectFromViewID(viewIDs[a]);
if (currentProject) {
- if (currentProject.documentID === app.project.documentID) { // We're in the right project!
+ if (currentProject.documentID === app.project.documentID) {
+ // We're in the right project!
var selectedItems = app.getProjectViewSelection(viewIDs[a]);
- if (selectedItems.length) {
+ if (selectedItems.length > 1) {
for (var b = 0; b < selectedItems.length; b++) {
var currentItem = selectedItems[b];
if (currentItem) {
- if ((!currentItem.isSequence()) && (currentItem.type !== ProjectItemType.BIN)) { // For every selected item which isn't a bin or sequence...
+ if (
+ !currentItem.isSequence() &&
+ currentItem.type !== ProjectItemType.BIN
+ ) {
+ // For every selected item which isn't a bin or sequence...
allPathsToStitch += currentItem.getMediaPath();
- allPathsToStitch += ";";
+ allPathsToStitch += ';';
}
}
}
-
- var AMEString = "var fe = app.getFrontend(); fe.stitchFiles(\"" + allPathsToStitch + "\"";
- var addendum = ", \"H.264\", \"" + presetPath + "\", " + "\"(This path parameter is never used)\");";
+ var AMEString =
+ 'var fe = app.getFrontend(); fe.stitchFiles("' + allPathsToStitch + '"';
+ var addendum = ', \'H.264\', \'' + presetPath + '\', \'(This path parameter is never used)\');';
AMEString += addendum;
-
- // 3. Send Command to AME for Export //
var bt = new BridgeTalk();
bt.target = 'ame';
bt.body = AMEString;
bt.send();
-
-
-
+ } else {
+ $._PPP_.updateEventPanel(
+ 'Select more than one render-able item, then try stitching again.'
+ );
}
}
}
}
},
- clearESTKConsole: function () {
- var bt = new BridgeTalk();
- bt.target = 'estoolkit-4.0';
- bt.body = function () {
- app.clc();
- }.toSource() + "()";
- bt.send();
+ myTrackItemAdded: function(track, trackItem) {
+ $._PPP_.updateEventPanel(
+ 'onActiveSequenceTrackItemAdded : ' +
+ track.name +
+ ' : ' +
+ trackItem.name +
+ ' : ' +
+ trackItem.nodeId +
+ '.'
+ );
+ },
+
+ myTrackItemRemoved: function(track, trackItem) {
+ $._PPP_.updateEventPanel(
+ 'onActiveSequenceTrackItemRemoved : ' +
+ track.name +
+ ' : ' +
+ trackItem.name +
+ ' : ' +
+ trackItem.nodeId +
+ '.'
+ );
+ },
+
+ mySequenceStructureChanged: function() {
+ $._PPP_.updateEventPanel('onActiveSequenceStructureChanged.');
+ },
+
+ registerSequenceMessaging: function() {
+ app.bind('onActiveSequenceTrackItemRemoved', $._PPP_.myTrackItemRemoved);
+ app.bind('onActiveSequenceTrackItemAdded', $._PPP_.myTrackItemAdded);
+ app.bind(
+ 'onActiveSequenceStructureChanged',
+ $._PPP_.mySequenceStructureChanged
+ );
+ },
+
+ enumerateTeamProjects: function() {
+ app.enableQE();
+ var numTeamProjectsOpen = 0;
+ for (var i = 0; i < app.projects.numProjects; i++) {
+ var project = app.projects[i];
+ if (project.isCloudProject) {
+ numTeamProjectsOpen++;
+ $._PPP_.updateEventPanel(project.name + ' is a cloud-based project.');
+ var localHubID = project.cloudProjectLocalID;
+ $._PPP_.updateEventPanel('LocalHub Id is ' + localHubID + '.');
+ var production = qe.ea.getProductionByID(localHubID);
+ $._PPP_.updateEventPanel('Production Name is ' + production.name + '.');
+ var remoteID = production.getRemoteProductionID();
+ $._PPP_.updateEventPanel('Remote Production Id is ' + remoteID + '.');
+ }
+ }
+ if (numTeamProjectsOpen === 0) {
+ $._PPP_.updateEventPanel('No open Team Projects found.');
+ } else {
+ $._PPP_.updateEventPanel(
+ numTeamProjectsOpen + ' open Team Projects Team Projects found.'
+ );
+ }
+ },
+
+ enableWorkArea: function(enable) {
+ var seq = app.project.activeSequence;
+ if (seq) {
+ var newStateString = 'undefined';
+ seq.setWorkAreaEnabled(enable);
+ var newState = seq.isWorkAreaEnabled();
+ if (newState) {
+ newStateString = 'ON';
+ } else {
+ newStateString = 'OFF';
+ }
+ var update =
+ 'Work area for ' +
+ app.project.activeSequence.name +
+ ' is now ' +
+ newStateString +
+ '.';
+ $._PPP_.updateEventPanel(update);
+ } else {
+ $._PPP_.updateEventPanel('No active sequence.');
+ }
+ },
+
+ modifyWorkArea: function() {
+ var seq = app.project.activeSequence;
+ if (seq) {
+ var workAreaIsEnabled = seq.isWorkAreaEnabled();
+ if (!workAreaIsEnabled) {
+ var confirmString = 'Enable work area for ' + seq.name + '?';
+ var turnOn = confirm(confirmString, true, 'Are you sure...?');
+ if (turnOn) {
+ $._PPP_.enableWorkArea(true);
+ }
+ }
+ var oldIn = seq.getWorkAreaInPointAsTime();
+ var oldOut = seq.getWorkAreaOutPointAsTime();
+ var newIn = oldIn;
+ var newOut = oldOut;
+ var duration = oldOut.seconds - oldIn.seconds;
+ newIn.seconds = oldIn.seconds + 10;
+ newOut.seconds = oldOut.seconds - 10;
+
+ seq.setWorkAreaInPoint(newIn.seconds);
+ seq.setWorkAreaOutPoint(newOut.seconds);
+ }
+ },
+
+ setLocale: function(localeFromCEP) {
+ $.locale = localeFromCEP;
+ $._PPP_.updateEventPanel(
+ 'ExtendScript Locale set to ' + localeFromCEP + '.'
+ );
+ },
+
+ disableTranscodeOnIngest: function(newValue) {
+ return app.setEnableTranscodeOnIngest(newValue);
+ },
+
+ generateSystemCompatibilityReport: function() {
+ app.enableQE();
+ var outputPath = new File('~/Desktop');
+ var outputFileName =
+ outputPath.fsName + $._PPP_.getSep() + 'System_Compatibility_Report.txt';
+ SystemCompatibilityReport.CreateReport(outputFileName);
+ $._PPP_.updateEventPanel(
+ 'System Compatibility report and project analysis report saved to user\'s Desktop.'
+ );
+ },
+
+ changeSequenceColorSpace: function() {
+ var seq = app.project.activeSequence;
+ if (seq) {
+ var currentSeqSettings = seq.getSettings();
+ if (currentSeqSettings) {
+ if (
+ currentSeqSettings.workingColorSpace ===
+ currentSeqSettings.workingColorSpaceList[0]
+ ) {
+ currentSeqSettings.workingColorSpace =
+ currentSeqSettings.workingColorSpaceList[1];
+ seq.setSettings(currentSeqSettings);
+ $._PPP_.updateEventPanel(
+ 'Changed sequence colorspace from \'' +
+ currentSeqSettings.workingColorSpaceList[0] +
+ '\' to \'' +
+ currentSeqSettings.workingColorSpaceList[1] +
+ '\'.'
+ );
+ } else {
+ currentSeqSettings.workingColorSpace =
+ currentSeqSettings.workingColorSpaceList[0];
+ seq.setSettings(currentSeqSettings);
+ $._PPP_.updateEventPanel(
+ 'Changed sequence colorspace to \'' +
+ currentSeqSettings.workingColorSpaceList[0] +
+ '\'.'
+ );
+ }
+ // Now, let's make sure all video clips in the sequence match the sequence's new colorspace.
+ for (
+ var trackIndex = 0;
+ trackIndex < seq.videoTracks.numTracks;
+ trackIndex++
+ ) {
+ var track = seq.videoTracks[trackIndex];
+ var clips = track.clips;
+ for (var clipIndex = 0; clipIndex < clips.numItems; clipIndex++) {
+ var clip = clips[clipIndex];
+ if (clip.projectItem) {
+ var oldColorSpace = clip.projectItem.getColorSpace();
+ clip.projectItem.setOverrideColorSpace(
+ currentSeqSettings.workingColorSpace
+ );
+ $._PPP_.updateEventPanel(
+ 'Previous color space for ' +
+ clip.projectItem.name +
+ ' was: ' +
+ oldColorSpace +
+ '.'
+ );
+ $._PPP_.updateEventPanel(
+ clip.name +
+ ' colorspace changed to \'' +
+ currentSeqSettings.workingColorSpace +
+ '\'.'
+ );
+ } else {
+ $._PPP_.updateEventPanel(
+ 'No project item available, from ' + clip.name + '.'
+ );
+ }
+ }
+ }
+ } else {
+ $._PPP_.updateEventPanel(
+ 'Could not obtain settings for ' + seq.name + '.'
+ );
+ }
+ } else {
+ $._PPP_.updateEventPanel('No active sequence.');
+ }
+ },
+
+ autoReframeActiveSequence: function() {
+ var seq = app.project.activeSequence;
+ if (seq) {
+ var numerator = 1;
+ var denominator = 1;
+ var motionPreset = '​Sensitive'; // valid values = '​Sensitive', '​LessSensitive', and '​MoreSensitive'
+ var newName = seq.name + ',auto-reframed by PProPanel.';
+ var useNestedSeqs = false;
+
+ var newSequence = seq.autoReframeSequence(
+ numerator,
+ denominator,
+ motionPreset,
+ newName,
+ useNestedSeqs
+ );
+
+ if (newSequence) {
+ $._PPP_.updateEventPanel('Created reframed sequence: ' + newName + '.');
+ } else {
+ $._PPP_.updateEventPanel(
+ 'Failed to create re-framed sequence: ' + newName + '.'
+ );
+ }
+ }
}
};
diff --git a/pype/premiere/extensions/com.pype.avalon/jsx/PPRO/debug.log b/pype/premiere/extensions/com.pype.avalon/jsx/PPRO/debug.log
new file mode 100644
index 0000000000..f840720af4
--- /dev/null
+++ b/pype/premiere/extensions/com.pype.avalon/jsx/PPRO/debug.log
@@ -0,0 +1,72 @@
+[0403/174733.987:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174733.988:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174733.988:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174733.988:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174733.988:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174733.988:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174733.988:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174733.988:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174733.988:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174733.988:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174733.989:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174733.989:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174733.989:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174733.989:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174733.989:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174733.989:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174733.989:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174733.989:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174733.989:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174733.989:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174733.989:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174733.989:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174733.989:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174733.989:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174747.475:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174747.476:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174747.476:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174747.476:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174747.476:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174747.476:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174747.476:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174747.476:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174747.476:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174747.476:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174747.476:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174747.476:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174747.476:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174747.476:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174747.476:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174747.477:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174747.477:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174747.477:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174747.477:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174747.477:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174747.477:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174747.477:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174747.477:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/174747.477:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/182044.527:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/182044.528:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/182044.528:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/182044.528:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/182044.528:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/182044.528:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/182044.528:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/182044.528:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/182044.528:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/182044.528:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/182044.528:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/182044.528:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/182044.528:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/182044.528:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/182044.528:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/182044.528:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/182044.528:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/182044.529:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/182044.529:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/182044.529:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/182044.529:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/182044.529:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/182044.529:ERROR:crash_report_database_win.cc(469)] failed to stat report
+[0403/182044.529:ERROR:crash_report_database_win.cc(469)] failed to stat report
diff --git a/pype/premiere/extensions/com.pype.avalon/jsx/batchRenamer.jsx b/pype/premiere/extensions/com.pype.avalon/jsx/batchRenamer.jsx
index 727ec05c2a..a41584f40c 100644
--- a/pype/premiere/extensions/com.pype.avalon/jsx/batchRenamer.jsx
+++ b/pype/premiere/extensions/com.pype.avalon/jsx/batchRenamer.jsx
@@ -11,7 +11,7 @@ _______________.___._____________________
*/
// variable br is defined in pypeAvalon.jsx
-br = {
+var br = {
getSelectedVideoTrackItems: function () {
var seq = app.project.activeSequence;
var selected = [];
@@ -28,10 +28,10 @@ br = {
var clip = videoTrack.clips[m];
selected.push({
- 'name': clip.name,
- 'clip': clip,
- 'sequence': seq,
- 'videoTrack': videoTrack
+ name: clip.name,
+ clip: clip,
+ sequence: seq,
+ videoTrack: videoTrack
});
}
}
diff --git a/pype/premiere/extensions/com.pype.avalon/jsx/pype.jsx b/pype/premiere/extensions/com.pype.avalon/jsx/pype.jsx
index f2ca65fa4e..44ebba155a 100644
--- a/pype/premiere/extensions/com.pype.avalon/jsx/pype.jsx
+++ b/pype/premiere/extensions/com.pype.avalon/jsx/pype.jsx
@@ -1,4 +1,4 @@
-/* global app, qe, $, ProjectItemType */
+/* global app, qe, $, ProjectItemType */
/*
.____ _ ___ .____.______
--- - - -- / . \// // . \ ___/ --- ---- - -
@@ -6,13 +6,17 @@
/__/ /___/ /__/ /______/
._- -=[ PyPe 4 3veR ]=- -_.
*/
+if (typeof (JSON) === 'undefined') {
+ var json2 = 'C:\\Users\\jezsc\\CODE\\pype-setup\\repos\\pype\\pype\\premiere\\extensions\\com.pype.avalon\\js\\json2.js';
+ $.evalFile(json2);
+}
if (ExternalObject.AdobeXMPScript === undefined) {
ExternalObject.AdobeXMPScript = new ExternalObject('lib:AdobeXMPScript');
}
// variable pype is defined in pypeAvalon.jsx
-pype = {
+var pype = {
addNewTrack: function (numTracks) {
app.enableQE();
var sequence = app.project.activeSequence;
@@ -191,8 +195,8 @@ pype = {
activeSequence.removeEmptyAudioTracks();
},
setEnvs: function (env) {
- for (key in env) {
- // $.writeln((key + ': ' + env[key]));
+ for (var key in env) {
+ $.writeln((key + ': ' + env[key]));
$.setenv(key, env[key])
};
},
@@ -933,7 +937,7 @@ pype = {
var outFileTest = new File(fullPathToFile);
if (outFileTest.exists) {
- var destroyExisting = confirm("A file with that name already exists; overwrite?", false, "Are you sure...?");
+ var destroyExisting = confirm('A file with that name already exists; overwrite?', false, 'Are you sure...?');
if (destroyExisting) {
outFileTest.remove();
outFileTest.close();
@@ -963,14 +967,14 @@ pype = {
return file;
}
} else {
- $._PPP_.updateEventPanel("Could not find output preset.");
+ $._PPP_.updateEventPanel('Could not find output preset.');
}
} else {
- $._PPP_.updateEventPanel("Could not find/create output path.");
+ $._PPP_.updateEventPanel('Could not find/create output path.');
}
projPath.close();
} else {
- $._PPP_.updateEventPanel("No active sequence.");
+ $._PPP_.updateEventPanel('No active sequence.');
}
},
@@ -983,7 +987,7 @@ pype = {
},
// $.getenv('PYTHONPATH')
alert_message: function (message) {
- alert(message, "WARNING", true);
+ alert(message, 'WARNING', true);
app.setSDKEventMessage(message, 'error');
},
getWorkFileVersion: function () {
@@ -1121,5 +1125,5 @@ function include(arr, obj) {
return false
}
-// var instances = pype.getPyblishRequest();
-// pype.encodeRepresentation(JSON.parse(instances));
+//var instances = pype.getPyblishRequest();
+//pype.encodeRepresentation(JSON.parse(instances));
diff --git a/pype/premiere/extensions/com.pype.avalon/ppro/css/avalon.min.css b/pype/premiere/extensions/com.pype.avalon/ppro/css/avalon.min.css
deleted file mode 100644
index c0ac0d732b..0000000000
--- a/pype/premiere/extensions/com.pype.avalon/ppro/css/avalon.min.css
+++ /dev/null
@@ -1,3 +0,0 @@
-body{background-color:#323238;color:#eeeeee}#output{background:#121212;color:#eeeeee;padding:2em;font-family:monospace;font-weight:bold;min-height:8em}.dark>.list-group-item{background:#454747}
-
-/*# sourceMappingURL=avalon.min.css.map */
\ No newline at end of file
diff --git a/pype/premiere/extensions/com.pype.avalon/ppro/css/avalon.min.css.map b/pype/premiere/extensions/com.pype.avalon/ppro/css/avalon.min.css.map
deleted file mode 100644
index 2999d6cbe9..0000000000
--- a/pype/premiere/extensions/com.pype.avalon/ppro/css/avalon.min.css.map
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "version": 3,
- "file": "avalon.min.css",
- "sources": [
- "avalon.scss"
- ],
- "names": [],
- "mappings": "AAAA,AAAA,IAAI,AAAC,CACH,gBAAgB,CAAE,OAAO,CACzB,KAAK,CAAE,OAAO,CACf,AAED,AAAA,OAAO,AAAC,CACN,UAAU,CAAE,OAAO,CACnB,KAAK,CAAE,OAAO,CACd,OAAO,CAAE,GAAG,CACZ,WAAW,CAAE,SAAS,CACtB,WAAW,CAAE,IAAI,CACjB,UAAU,CAAE,GAAG,CAChB,AAED,AAAA,KAAK,CAAG,gBAAgB,AAAC,CACvB,UAAU,CAAE,OAAO,CACpB"
-}
\ No newline at end of file
diff --git a/pype/premiere/extensions/com.pype.avalon/ppro/css/avalon.scss b/pype/premiere/extensions/com.pype.avalon/ppro/css/avalon.scss
deleted file mode 100644
index cf06ece9be..0000000000
--- a/pype/premiere/extensions/com.pype.avalon/ppro/css/avalon.scss
+++ /dev/null
@@ -1,17 +0,0 @@
-body {
- background-color: #323238;
- color: #eeeeee;
-}
-
-#output {
- background: #121212;
- color: #eeeeee;
- padding: 2em;
- font-family: monospace;
- font-weight: bold;
- min-height: 8em;
-}
-
-.dark > .list-group-item {
- background: #454747;
-}
diff --git a/pype/premiere/extensions/com.pype.avalon/ppro/css/bootstrap.min.css b/pype/premiere/extensions/com.pype.avalon/ppro/css/bootstrap.min.css
deleted file mode 100644
index e6b4977799..0000000000
--- a/pype/premiere/extensions/com.pype.avalon/ppro/css/bootstrap.min.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap v4.2.1 (https://getbootstrap.com/)
- * Copyright 2011-2018 The Bootstrap Authors
- * Copyright 2011-2018 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(2.25rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:2.25rem;background-repeat:no-repeat;background-position:center right calc(2.25rem / 4);background-size:calc(2.25rem / 2) calc(2.25rem / 2);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e")}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:2.25rem;background-position:top calc(2.25rem / 4) right calc(2.25rem / 4)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:3.4375rem;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") no-repeat center right 1.75rem/1.125rem 1.125rem}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:2.25rem;background-repeat:no-repeat;background-position:center right calc(2.25rem / 4);background-size:calc(2.25rem / 2) calc(2.25rem / 2);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23d9534f' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E")}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:2.25rem;background-position:top calc(2.25rem / 4) right calc(2.25rem / 4)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:3.4375rem;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23d9534f' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") no-repeat center right 1.75rem/1.125rem 1.125rem}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media screen and (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media screen and (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-right{right:0;left:auto}}.dropdown-menu-left{right:auto;left:0}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:first-child{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.dropdown-item:last-child{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(2.875rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.8125rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:2.25rem;padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:calc(1rem + .4rem);padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;color:inherit;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion .card{overflow:hidden}.accordion .card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion .card .card-header{margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media screen and (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled){cursor:pointer}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);border-radius:.25rem;box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media screen and (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-dialog-centered::before{display:block;height:calc(100vh - (.5rem * 2));content:""}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-dialog-centered::before{height:calc(100vh - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:0s .6s opacity}@media screen and (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media screen and (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media screen and (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-3by4::before{padding-top:133.333333%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}
-/*# sourceMappingURL=bootstrap.min.css.map */
\ No newline at end of file
diff --git a/pype/premiere/extensions/com.pype.avalon/ppro/css/bootstrap.min.css.map b/pype/premiere/extensions/com.pype.avalon/ppro/css/bootstrap.min.css.map
deleted file mode 100644
index 5acf96bdd1..0000000000
--- a/pype/premiere/extensions/com.pype.avalon/ppro/css/bootstrap.min.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","bootstrap.css","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/_tables.scss","../../scss/mixins/_table-row.scss","../../scss/_forms.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_forms.scss","../../scss/mixins/_gradients.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/mixins/_nav-divider.scss","../../scss/_button-group.scss","../../scss/_input-group.scss","../../scss/_custom-forms.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/mixins/_badge.scss","../../scss/_jumbotron.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_media.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/utilities/_align.scss","../../scss/mixins/_background-variant.scss","../../scss/utilities/_background.scss","../../scss/utilities/_borders.scss","../../scss/utilities/_display.scss","../../scss/utilities/_embed.scss","../../scss/utilities/_flex.scss","../../scss/utilities/_float.scss","../../scss/mixins/_float.scss","../../scss/utilities/_overflow.scss","../../scss/utilities/_position.scss","../../scss/utilities/_screenreaders.scss","../../scss/mixins/_screen-reader.scss","../../scss/utilities/_shadows.scss","../../scss/utilities/_sizing.scss","../../scss/utilities/_spacing.scss","../../scss/utilities/_text.scss","../../scss/mixins/_text-truncate.scss","../../scss/mixins/_text-emphasis.scss","../../scss/mixins/_text-hide.scss","../../scss/utilities/_visibility.scss","../../scss/mixins/_visibility.scss","../../scss/_print.scss"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap v4.2.1 (https://getbootstrap.com/)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"code\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"input-group\";\n@import \"custom-forms\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"jumbotron\";\n@import \"alert\";\n@import \"progress\";\n@import \"media\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"utilities\";\n@import \"print\";\n",":root {\n // Custom variable values only support SassScript inside `#{}`.\n @each $color, $value in $colors {\n --#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$color}: #{$value};\n }\n\n @each $bp, $value in $grid-breakpoints {\n --breakpoint-#{$bp}: #{$value};\n }\n\n // Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --font-family-sans-serif: #{inspect($font-family-sans-serif)};\n --font-family-monospace: #{inspect($font-family-monospace)};\n}\n","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `
` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n font-size: $font-size-base;\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Suppress the focus outline on elements that cannot be accessed via keyboard.\n// This prevents an unwanted focus outline from appearing around elements that\n// might still respond to pointer events.\n//\n// Credit: https://github.com/suitcss/base\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `
`-`
` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `
`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n font-size: 80%; // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href)\n// which have not been made explicitly keyboard-focusable (without tabindex).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n\n @include hover-focus {\n color: inherit;\n text-decoration: none;\n }\n\n &:focus {\n outline: 0;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n font-size: 1em; // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n // Matches default `
` alignment by inheriting from the ``, or the\n // closest parent with a set `text-align`.\n text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n // Remove the default appearance of temporal inputs to avoid a Mobile Safari\n // bug where setting a custom line-height prevents text from being vertically\n // centered within the input.\n // See https://bugs.webkit.org/show_bug.cgi?id=139848\n // and https://github.com/twbs/bootstrap/issues/11266\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `