@decaf-ts/utils 0.2.11 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/LICENSE.md +21 -157
  2. package/README.md +403 -12
  3. package/bin/build-scripts.cjs +253 -67
  4. package/bin/tag-release.cjs +185 -62
  5. package/bin/update-scripts.cjs +224 -62
  6. package/dist/utils.cjs +364 -70
  7. package/dist/utils.esm.cjs +364 -70
  8. package/lib/cli/command.cjs +2 -2
  9. package/lib/cli/command.d.ts +1 -1
  10. package/lib/cli/commands/build-scripts.cjs +8 -6
  11. package/lib/cli/constants.cjs +3 -1
  12. package/lib/cli/constants.d.ts +2 -0
  13. package/lib/cli/types.cjs +1 -1
  14. package/lib/cli/types.d.ts +2 -0
  15. package/lib/esm/bin/build-scripts.js +2 -2
  16. package/lib/esm/bin/tag-release.js +2 -2
  17. package/lib/esm/bin/update-scripts.js +2 -2
  18. package/lib/esm/cli/command.d.ts +1 -1
  19. package/lib/esm/cli/command.js +7 -7
  20. package/lib/esm/cli/commands/build-scripts.js +11 -9
  21. package/lib/esm/cli/commands/index.js +4 -4
  22. package/lib/esm/cli/commands/tag-release.js +5 -5
  23. package/lib/esm/cli/commands/update-scripts.js +4 -4
  24. package/lib/esm/cli/constants.d.ts +2 -0
  25. package/lib/esm/cli/constants.js +3 -1
  26. package/lib/esm/cli/index.js +4 -4
  27. package/lib/esm/cli/types.d.ts +2 -0
  28. package/lib/esm/cli/types.js +1 -1
  29. package/lib/esm/index.d.ts +4 -4
  30. package/lib/esm/index.js +10 -10
  31. package/lib/esm/input/index.js +3 -3
  32. package/lib/esm/input/input.d.ts +65 -19
  33. package/lib/esm/input/input.js +61 -22
  34. package/lib/esm/input/types.d.ts +7 -7
  35. package/lib/esm/input/types.js +1 -1
  36. package/lib/esm/output/common.d.ts +2 -0
  37. package/lib/esm/output/common.js +4 -1
  38. package/lib/esm/output/index.js +2 -2
  39. package/lib/esm/utils/constants.d.ts +12 -6
  40. package/lib/esm/utils/constants.js +13 -7
  41. package/lib/esm/utils/environment.d.ts +13 -0
  42. package/lib/esm/utils/environment.js +16 -3
  43. package/lib/esm/utils/fs.d.ts +111 -5
  44. package/lib/esm/utils/fs.js +114 -8
  45. package/lib/esm/utils/http.d.ts +1 -1
  46. package/lib/esm/utils/http.js +2 -2
  47. package/lib/esm/utils/index.js +8 -8
  48. package/lib/esm/utils/md.d.ts +15 -15
  49. package/lib/esm/utils/md.js +1 -1
  50. package/lib/esm/utils/tests.d.ts +26 -3
  51. package/lib/esm/utils/tests.js +40 -2
  52. package/lib/esm/utils/text.d.ts +33 -7
  53. package/lib/esm/utils/text.js +34 -8
  54. package/lib/esm/utils/timeout.d.ts +11 -0
  55. package/lib/esm/utils/timeout.js +12 -1
  56. package/lib/esm/utils/types.d.ts +33 -2
  57. package/lib/esm/utils/types.js +1 -1
  58. package/lib/esm/utils/utils.d.ts +44 -2
  59. package/lib/esm/utils/utils.js +23 -5
  60. package/lib/esm/utils/web.d.ts +3 -2
  61. package/lib/esm/utils/web.js +4 -3
  62. package/lib/esm/writers/OutputWriter.d.ts +2 -2
  63. package/lib/esm/writers/OutputWriter.js +1 -1
  64. package/lib/esm/writers/RegexpOutputWriter.d.ts +51 -10
  65. package/lib/esm/writers/RegexpOutputWriter.js +53 -12
  66. package/lib/esm/writers/StandardOutputWriter.d.ts +49 -10
  67. package/lib/esm/writers/StandardOutputWriter.js +51 -12
  68. package/lib/esm/writers/index.js +5 -5
  69. package/lib/esm/writers/types.d.ts +2 -2
  70. package/lib/esm/writers/types.js +1 -1
  71. package/lib/index.cjs +5 -5
  72. package/lib/index.d.ts +4 -4
  73. package/lib/input/input.cjs +61 -22
  74. package/lib/input/input.d.ts +65 -19
  75. package/lib/input/types.cjs +1 -1
  76. package/lib/input/types.d.ts +7 -7
  77. package/lib/output/common.cjs +4 -1
  78. package/lib/output/common.d.ts +2 -0
  79. package/lib/utils/constants.cjs +13 -7
  80. package/lib/utils/constants.d.ts +12 -6
  81. package/lib/utils/environment.cjs +14 -1
  82. package/lib/utils/environment.d.ts +13 -0
  83. package/lib/utils/fs.cjs +112 -6
  84. package/lib/utils/fs.d.ts +111 -5
  85. package/lib/utils/http.cjs +2 -2
  86. package/lib/utils/http.d.ts +1 -1
  87. package/lib/utils/md.cjs +1 -1
  88. package/lib/utils/md.d.ts +15 -15
  89. package/lib/utils/tests.cjs +39 -1
  90. package/lib/utils/tests.d.ts +26 -3
  91. package/lib/utils/text.cjs +34 -8
  92. package/lib/utils/text.d.ts +33 -7
  93. package/lib/utils/timeout.cjs +12 -1
  94. package/lib/utils/timeout.d.ts +11 -0
  95. package/lib/utils/types.cjs +1 -1
  96. package/lib/utils/types.d.ts +33 -2
  97. package/lib/utils/utils.cjs +21 -3
  98. package/lib/utils/utils.d.ts +44 -2
  99. package/lib/utils/web.cjs +4 -3
  100. package/lib/utils/web.d.ts +3 -2
  101. package/lib/writers/OutputWriter.cjs +1 -1
  102. package/lib/writers/OutputWriter.d.ts +2 -2
  103. package/lib/writers/RegexpOutputWriter.cjs +52 -11
  104. package/lib/writers/RegexpOutputWriter.d.ts +51 -10
  105. package/lib/writers/StandardOutputWriter.cjs +50 -11
  106. package/lib/writers/StandardOutputWriter.d.ts +49 -10
  107. package/lib/writers/types.cjs +1 -1
  108. package/lib/writers/types.d.ts +2 -2
  109. package/package.json +3 -2
@@ -6714,23 +6714,22 @@ class MiniLogger {
6714
6714
  * @param [conf] - Optional logging configuration. Defaults to Info level and verbosity 0.
6715
6715
  * @param [id] - Optional unique identifier for the logger instance.
6716
6716
  */
6717
- constructor(context, conf, id) {
6717
+ constructor(context, conf) {
6718
6718
  this.context = context;
6719
6719
  this.conf = conf;
6720
- this.id = id;
6721
6720
  }
6722
6721
  config(key) {
6723
6722
  if (this.conf && key in this.conf)
6724
6723
  return this.conf[key];
6725
6724
  return Logging.getConfig()[key];
6726
6725
  }
6727
- for(method, config) {
6726
+ for(method, config, ...args) {
6728
6727
  method = method
6729
6728
  ? typeof method === "string"
6730
6729
  ? method
6731
6730
  : method.name
6732
6731
  : undefined;
6733
- return Logging.for([this.context, method].join("."), this.id, config);
6732
+ return Logging.for([this.context, method].join("."), config, ...args);
6734
6733
  }
6735
6734
  /**
6736
6735
  * @description Creates a formatted log string.
@@ -6761,11 +6760,11 @@ class MiniLogger {
6761
6760
  : this.context;
6762
6761
  log.push(context);
6763
6762
  }
6764
- if (this.id) {
6763
+ if (this.config("correlationId")) {
6765
6764
  {
6766
6765
  const id = style
6767
- ? Logging.theme(this.id, "id", level)
6768
- : this.id;
6766
+ ? Logging.theme(this.config("correlationId").toString(), "id", level)
6767
+ : this.config("correlationId").toString();
6769
6768
  log.push(id);
6770
6769
  }
6771
6770
  }
@@ -6879,8 +6878,8 @@ class Logging {
6879
6878
  * @description Factory function for creating logger instances.
6880
6879
  * @summary A function that creates new VerbosityLogger instances. By default, it creates a MiniLogger.
6881
6880
  */
6882
- static { this._factory = (object, config, id) => {
6883
- return new MiniLogger(object, config, id);
6881
+ static { this._factory = (object, config) => {
6882
+ return new MiniLogger(object, config);
6884
6883
  }; }
6885
6884
  /**
6886
6885
  * @description Configuration for the logging system.
@@ -6892,7 +6891,7 @@ class Logging {
6892
6891
  * @summary Ensures that the Logging class cannot be instantiated as it's designed to be used statically.
6893
6892
  */
6894
6893
  constructor() { }
6895
- setFactory(factory) {
6894
+ static setFactory(factory) {
6896
6895
  Logging._factory = factory;
6897
6896
  }
6898
6897
  /**
@@ -6963,11 +6962,14 @@ class Logging {
6963
6962
  static error(msg) {
6964
6963
  return this.get().error(msg);
6965
6964
  }
6966
- static for(object, id, config) {
6967
- object = typeof object === "string" ? object : object.name;
6968
- id = typeof id === "string" ? id : undefined;
6969
- config = typeof id === "object" ? id : config;
6970
- return this._factory(object, config, id);
6965
+ static for(object, config, ...args) {
6966
+ object =
6967
+ typeof object === "string"
6968
+ ? object
6969
+ : object.constructor
6970
+ ? object.constructor.name
6971
+ : object.name;
6972
+ return this._factory(object, config, ...args);
6971
6973
  }
6972
6974
  /**
6973
6975
  * @description Creates a logger for a specific reason or context.
@@ -7068,15 +7070,52 @@ class Logging {
7068
7070
  * @param name - The name of the prompt, used as the key in the returned answers object.
7069
7071
  *
7070
7072
  * @class
7073
+ * @example
7074
+ * ```typescript
7075
+ * import { UserInput } from '@decaf-ts/utils';
7076
+ *
7077
+ * // Create a simple text input
7078
+ * const nameInput = new UserInput('name')
7079
+ * .setMessage('What is your name?')
7080
+ * .setInitial('User');
7081
+ *
7082
+ * // Create a number input with validation
7083
+ * const ageInput = new UserInput('age')
7084
+ * .setType('number')
7085
+ * .setMessage('How old are you?')
7086
+ * .setMin(0)
7087
+ * .setMax(120);
7088
+ *
7089
+ * // Ask for input and process the results
7090
+ * async function getUserInfo() {
7091
+ * const answers = await UserInput.ask([nameInput, ageInput]);
7092
+ * console.log(`Hello ${answers.name}, you are ${answers.age} years old.`);
7093
+ * }
7094
+ *
7095
+ * getUserInfo();
7096
+ * ```
7097
+ *
7098
+ * @mermaid
7099
+ * sequenceDiagram
7100
+ * participant Client
7101
+ * participant UserInput
7102
+ * participant PromptLibrary
7103
+ *
7104
+ * Client->>UserInput: new UserInput(name)
7105
+ * Client->>UserInput: setMessage(message)
7106
+ * Client->>UserInput: setType(type)
7107
+ * Client->>UserInput: setInitial(initial)
7108
+ * Client->>UserInput: Other configuration methods
7109
+ *
7110
+ * Client->>UserInput: ask()
7111
+ * UserInput->>PromptLibrary: prompts(question)
7112
+ * PromptLibrary->>Client: Display prompt
7113
+ * Client->>PromptLibrary: User provides input
7114
+ * PromptLibrary->>UserInput: Return answers
7115
+ * UserInput->>Client: Return processed answers
7071
7116
  */
7072
7117
  class UserInput {
7073
7118
  static { this.logger = Logging.for(UserInput); }
7074
- /**
7075
- * @description Creates a new UserInput instance.
7076
- * @summary Initializes a new UserInput object with the given name.
7077
- *
7078
- * @param name - The name of the prompt.
7079
- */
7080
7119
  constructor(name) {
7081
7120
  /**
7082
7121
  * @description The type of the prompt.
@@ -7169,18 +7208,6 @@ class UserInput {
7169
7208
  this.onState = value;
7170
7209
  return this;
7171
7210
  }
7172
- /**
7173
- * @description Sets the onRender callback of the prompt.
7174
- * @summary Configures a function to be called when the prompt is rendered.
7175
- *
7176
- * @param value - The onRender callback function.
7177
- * @returns This UserInput instance for method chaining.
7178
- */
7179
- setOnRender(value) {
7180
- UserInput.logger.verbose(`Setting onRender callback`);
7181
- this.onRender = value;
7182
- return this;
7183
- }
7184
7211
  /**
7185
7212
  * @description Sets the minimum value for number inputs.
7186
7213
  * @summary Configures the lowest number the user can input.
@@ -7289,6 +7316,13 @@ class UserInput {
7289
7316
  this.inactive = value;
7290
7317
  return this;
7291
7318
  }
7319
+ /**
7320
+ * @description Sets the choices for select, multiselect, or autocomplete inputs.
7321
+ * @summary Configures the available options that the user can select from in choice-based prompts.
7322
+ *
7323
+ * @param value - The array of choices or a function to determine the choices.
7324
+ * @returns This UserInput instance for method chaining.
7325
+ */
7292
7326
  setChoices(value) {
7293
7327
  UserInput.logger.verbose(`Setting choices: ${JSON.stringify(value)}`);
7294
7328
  this.choices = value;
@@ -7318,6 +7352,13 @@ class UserInput {
7318
7352
  this.warn = value;
7319
7353
  return this;
7320
7354
  }
7355
+ /**
7356
+ * @description Sets the suggestion function for autocomplete inputs.
7357
+ * @summary Configures a function that provides suggestions based on the user's input and available choices.
7358
+ *
7359
+ * @param value - A function that takes the current input and available choices and returns a Promise resolving to suggestions.
7360
+ * @returns This UserInput instance for method chaining.
7361
+ */
7321
7362
  setSuggest(value) {
7322
7363
  UserInput.logger.verbose(`Setting suggest function`);
7323
7364
  this.suggest = value;
@@ -7479,8 +7520,8 @@ class UserInput {
7479
7520
  * @template R - The type of the expected result.
7480
7521
  * @param input - The UserInput instance to use for prompting.
7481
7522
  * @param test - A function to validate the user's input.
7523
+ * @param defaultConfirmation - The default value for the confirmation prompt (true for yes, false for no).
7482
7524
  * @param limit - The maximum number of attempts allowed (default is 1).
7483
- * @param defaultConfirmation
7484
7525
  * @return A Promise that resolves to the valid input or undefined if the limit is reached.
7485
7526
  *
7486
7527
  * @mermaid
@@ -7547,7 +7588,7 @@ class UserInput {
7547
7588
  * @param test - A function to validate the user's input.
7548
7589
  * @param mask - The character used to mask the input (optional, for password-like inputs).
7549
7590
  * @param initial - The initial value presented to the user (optional).
7550
- * @param defaultConfirmation
7591
+ * @param defaultConfirmation - The default value for the confirmation prompt (true for yes, false for no).
7551
7592
  * @param limit - The maximum number of attempts allowed (default is -1, meaning unlimited).
7552
7593
  * @return A Promise that resolves to the valid input or undefined if the limit is reached.
7553
7594
  */
@@ -7571,7 +7612,7 @@ class UserInput {
7571
7612
  * @param min - The minimum allowed value (optional).
7572
7613
  * @param max - The maximum allowed value (optional).
7573
7614
  * @param initial - The initial value presented to the user (optional).
7574
- * @param defaultConfirmation
7615
+ * @param defaultConfirmation - The default value for the confirmation prompt (true for yes, false for no).
7575
7616
  * @param limit - The maximum number of attempts allowed (default is -1, meaning unlimited).
7576
7617
  * @return A Promise that resolves to the valid input or undefined if the limit is reached.
7577
7618
  */
@@ -7651,6 +7692,7 @@ class UserInput {
7651
7692
  * @property {Object} banner - Banner display option.
7652
7693
  * @property {string} banner.type - The type of the banner option (boolean).
7653
7694
  * @property {boolean} banner.default - The default value for banner display (false).
7695
+ * @memberOf module:utils
7654
7696
  */
7655
7697
  const DefaultCommandOptions = {
7656
7698
  verbose: {
@@ -7691,6 +7733,7 @@ const DefaultCommandOptions = {
7691
7733
  * @const DefaultCommandValues
7692
7734
  * @typedef {Object} DefaultCommandValues
7693
7735
  * @property {unknown} [key: string] - The default value for each option in DefaultCommandOptions.
7736
+ * @memberOf module:utils
7694
7737
  */
7695
7738
  const DefaultCommandValues = Object.keys(DefaultCommandOptions).reduce((acc, key) => {
7696
7739
  acc[key] =
@@ -7711,7 +7754,21 @@ const DefaultCommandValues = Object.keys(DefaultCommandOptions).reduce((acc, key
7711
7754
  *
7712
7755
  * @function padEnd
7713
7756
  *
7714
- * @memberOf module:TextUtils
7757
+ * @memberOf module:utils
7758
+ */
7759
+ /**
7760
+ * @description Replaces occurrences of keys with their corresponding values in a string.
7761
+ * @summary Iterates through a set of key-value pairs and replaces all occurrences of each key
7762
+ * in the input string with its corresponding value. Supports regular expression flags for customized replacement.
7763
+ *
7764
+ * @param {string} input - The input string in which replacements will be made.
7765
+ * @param {Record<string, number | string>} values - An object containing key-value pairs for replacement.
7766
+ * @param {string} [flags="g"] - Regular expression flags to control the replacement behavior.
7767
+ * @return {string} The string with all specified replacements applied.
7768
+ *
7769
+ * @function patchString
7770
+ *
7771
+ * @memberOf module:utils
7715
7772
  */
7716
7773
  function patchString(input, values, flags = "g") {
7717
7774
  Object.entries(values).forEach(([key, val]) => {
@@ -7730,7 +7787,7 @@ function patchString(input, values, flags = "g") {
7730
7787
  *
7731
7788
  * @function toENVFormat
7732
7789
  *
7733
- * @memberOf module:TextUtils
7790
+ * @memberOf module:utils
7734
7791
  */
7735
7792
  function toENVFormat(text) {
7736
7793
  return toSnakeCase(text).toUpperCase();
@@ -7744,7 +7801,7 @@ function toENVFormat(text) {
7744
7801
  *
7745
7802
  * @function toSnakeCase
7746
7803
  *
7747
- * @memberOf module:TextUtils
7804
+ * @memberOf module:utils
7748
7805
  */
7749
7806
  function toSnakeCase(text) {
7750
7807
  return text
@@ -7752,6 +7809,18 @@ function toSnakeCase(text) {
7752
7809
  .replace(/[\s-]+/g, "_")
7753
7810
  .toLowerCase();
7754
7811
  }
7812
+ /**
7813
+ * @description Escapes special characters in a string for use in a regular expression.
7814
+ * @summary Adds backslashes before characters that have special meaning in regular expressions,
7815
+ * allowing the string to be used as a literal match in a RegExp.
7816
+ *
7817
+ * @param {string} string - The string to escape for regular expression use.
7818
+ * @return {string} The escaped string safe for use in regular expressions.
7819
+ *
7820
+ * @function escapeRegExp
7821
+ *
7822
+ * @memberOf module:utils
7823
+ */
7755
7824
  function escapeRegExp(string) {
7756
7825
  return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
7757
7826
  }
@@ -7760,14 +7829,14 @@ function escapeRegExp(string) {
7760
7829
  * @description Default encoding for text operations.
7761
7830
  * @summary The standard UTF-8 encoding used for text processing.
7762
7831
  * @const {string} Encoding
7763
- * @memberOf @decaf-ts/utils
7832
+ * @memberOf module:utils
7764
7833
  */
7765
7834
  const Encoding = "utf-8";
7766
7835
  /**
7767
7836
  * @description Enum for semantic version components.
7768
7837
  * @summary Defines the three levels of semantic versioning: PATCH, MINOR, and MAJOR.
7769
7838
  * @enum {string}
7770
- * @memberOf @decaf-ts/utils
7839
+ * @memberOf module:utils
7771
7840
  */
7772
7841
  var SemVersion;
7773
7842
  (function (SemVersion) {
@@ -7782,7 +7851,7 @@ var SemVersion;
7782
7851
  * @description Enum for various authentication tokens.
7783
7852
  * @summary Defines the file names for storing different types of authentication tokens.
7784
7853
  * @enum {string}
7785
- * @memberOf @decaf-ts/utils
7854
+ * @memberOf module:utils
7786
7855
  */
7787
7856
  var Tokens;
7788
7857
  (function (Tokens) {
@@ -7795,6 +7864,12 @@ var Tokens;
7795
7864
  /** Confluence authentication token file name. */
7796
7865
  Tokens["CONFLUENCE"] = ".confluence-token";
7797
7866
  })(Tokens || (Tokens = {}));
7867
+ /**
7868
+ * @description Code used to indicate an operation was aborted.
7869
+ * @summary Standard message used when a process is manually terminated.
7870
+ * @const {string} AbortCode
7871
+ * @memberOf module:utils
7872
+ */
7798
7873
  const AbortCode = "Aborted";
7799
7874
 
7800
7875
  /**
@@ -7804,22 +7879,61 @@ const AbortCode = "Aborted";
7804
7879
  * error output, and exit codes. It also includes utility methods for parsing commands
7805
7880
  * and resolving or rejecting promises based on execution results.
7806
7881
  *
7807
- * @template R - The type of the resolved value, defaulting to number.
7882
+ * @template R - The type of the resolved value, defaulting to string.
7808
7883
  *
7884
+ * @param cmd - The command string to be executed.
7809
7885
  * @param lock - A PromiseExecutor to control the asynchronous flow.
7810
7886
  * @param args - Additional arguments (unused in the current implementation).
7811
7887
  *
7812
7888
  * @class
7889
+ * @example
7890
+ * ```typescript
7891
+ * import { StandardOutputWriter } from '@decaf-ts/utils';
7892
+ * import { PromiseExecutor } from '@decaf-ts/utils';
7893
+ *
7894
+ * // Create a promise executor
7895
+ * const executor: PromiseExecutor<string> = {
7896
+ * resolve: (value) => console.log(`Resolved: ${value}`),
7897
+ * reject: (error) => console.error(`Rejected: ${error.message}`)
7898
+ * };
7899
+ *
7900
+ * // Create a standard output writer
7901
+ * const writer = new StandardOutputWriter('ls -la', executor);
7902
+ *
7903
+ * // Use the writer to handle command output
7904
+ * writer.data('File list output...');
7905
+ * writer.exit(0, ['Command executed successfully']);
7906
+ * ```
7907
+ *
7908
+ * @mermaid
7909
+ * sequenceDiagram
7910
+ * participant Client
7911
+ * participant StandardOutputWriter
7912
+ * participant Logger
7913
+ * participant PromiseExecutor
7914
+ *
7915
+ * Client->>StandardOutputWriter: new StandardOutputWriter(cmd, lock)
7916
+ * StandardOutputWriter->>Logger: Logging.for(cmd)
7917
+ *
7918
+ * Client->>StandardOutputWriter: data(chunk)
7919
+ * StandardOutputWriter->>StandardOutputWriter: log("stdout", chunk)
7920
+ * StandardOutputWriter->>Logger: logger.info(log)
7921
+ *
7922
+ * Client->>StandardOutputWriter: error(chunk)
7923
+ * StandardOutputWriter->>StandardOutputWriter: log("stderr", chunk)
7924
+ * StandardOutputWriter->>Logger: logger.info(log)
7925
+ *
7926
+ * Client->>StandardOutputWriter: exit(code, logs)
7927
+ * StandardOutputWriter->>StandardOutputWriter: log("stdout", exitMessage)
7928
+ * alt code === 0
7929
+ * StandardOutputWriter->>StandardOutputWriter: resolve(logs)
7930
+ * StandardOutputWriter->>PromiseExecutor: lock.resolve(reason)
7931
+ * else code !== 0
7932
+ * StandardOutputWriter->>StandardOutputWriter: reject(error)
7933
+ * StandardOutputWriter->>PromiseExecutor: lock.reject(reason)
7934
+ * end
7813
7935
  */
7814
7936
  class StandardOutputWriter {
7815
- /**
7816
- * @description Initializes a new instance of StandardOutputWriter.
7817
- * @summary Constructs the StandardOutputWriter with a lock mechanism and optional arguments.
7818
- *
7819
- * @param cmd
7820
- * @param lock - A PromiseExecutor to control the asynchronous flow.
7821
- * @param args - Additional arguments (currently unused).
7822
- */
7823
7937
  constructor(cmd, lock,
7824
7938
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
7825
7939
  ...args) {
@@ -7871,7 +7985,7 @@ class StandardOutputWriter {
7871
7985
  * @summary Logs the exit code and resolves or rejects the promise based on the code.
7872
7986
  *
7873
7987
  * @param code - The exit code of the command.
7874
- * @param logs
7988
+ * @param logs - Array of log messages to be processed before exiting.
7875
7989
  */
7876
7990
  exit(code, logs) {
7877
7991
  this.log("stdout", `command exited code : ${code === 0 ? style(code.toString()).green.text : style(code === null ? "null" : code.toString()).red.text}`);
@@ -7950,6 +8064,24 @@ function chainAbortController(argument0, ...remainder) {
7950
8064
  }
7951
8065
  return controller;
7952
8066
  }
8067
+ /**
8068
+ * @description Spawns a command as a child process with output handling.
8069
+ * @summary Creates a child process to execute a command with support for piping multiple commands,
8070
+ * custom output handling, and abort control. This function handles the low-level details of
8071
+ * spawning processes and connecting their inputs/outputs when piping is used.
8072
+ *
8073
+ * @template R - The type of the processed output, defaulting to string.
8074
+ * @param {StandardOutputWriter<R>} output - The output writer to handle command output.
8075
+ * @param {string} command - The command to execute, can include pipe operators.
8076
+ * @param {SpawnOptionsWithoutStdio} opts - Options for the spawned process.
8077
+ * @param {AbortController} abort - Controller to abort the command execution.
8078
+ * @param {Logger} logger - Logger for recording command execution details.
8079
+ * @return {ChildProcessWithoutNullStreams} The spawned child process.
8080
+ *
8081
+ * @function spawnCommand
8082
+ *
8083
+ * @memberOf module:utils
8084
+ */
7953
8085
  function spawnCommand(output, command, opts, abort, logger) {
7954
8086
  function spawnInner(command, controller) {
7955
8087
  const [cmd, argz] = output.parseCommand(command);
@@ -8028,7 +8160,7 @@ function spawnCommand(output, command, opts, abort, logger) {
8028
8160
  * OutputWriter-->>runCommand: Resolve or reject promise
8029
8161
  * runCommand-->>Caller: Return CommandResult
8030
8162
  *
8031
- * @memberOf @decaf-ts/utils
8163
+ * @memberOf module:utils
8032
8164
  */
8033
8165
  function runCommand(command, opts = {}, outputConstructor = (StandardOutputWriter), ...args) {
8034
8166
  const logger = Logging.for(runCommand);
@@ -8123,7 +8255,7 @@ const logger = Logging.for("fs");
8123
8255
  * writeFile-->>patchFile: File written
8124
8256
  * patchFile-->>Caller: Patching complete
8125
8257
  *
8126
- * @memberOf module:fs-utils
8258
+ * @memberOf module:utils
8127
8259
  */
8128
8260
  function patchFile(path, values) {
8129
8261
  const log = logger.for(patchFile);
@@ -8190,12 +8322,12 @@ function writeFile(path, data) {
8190
8322
  * @summary Traverses through directories and subdirectories to collect all file paths.
8191
8323
  *
8192
8324
  * @param {string} p - The path to start searching from.
8193
- * @param filter
8325
+ * @param {function} [filter] - Optional function to filter files by name or index.
8194
8326
  * @return {string[]} Array of file paths.
8195
8327
  *
8196
8328
  * @function getAllFiles
8197
8329
  *
8198
- * @memberOf module:fs-utils
8330
+ * @memberOf module:utils
8199
8331
  */
8200
8332
  function getAllFiles(p, filter) {
8201
8333
  const log = logger.for(getAllFiles);
@@ -8222,6 +8354,18 @@ function getAllFiles(p, filter) {
8222
8354
  throw new Error(`Error retrieving files from "${p}": ${error}`);
8223
8355
  }
8224
8356
  }
8357
+ /**
8358
+ * @description Renames a file or directory.
8359
+ * @summary Moves a file or directory from the source path to the destination path.
8360
+ *
8361
+ * @param {string} source - The source path of the file or directory.
8362
+ * @param {string} dest - The destination path for the file or directory.
8363
+ * @return {Promise<void>} A promise that resolves when the rename operation is complete.
8364
+ *
8365
+ * @function renameFile
8366
+ *
8367
+ * @memberOf module:utils
8368
+ */
8225
8369
  async function renameFile(source, dest) {
8226
8370
  const log = logger.for(renameFile);
8227
8371
  let descriptorSource, descriptorDest;
@@ -8253,6 +8397,18 @@ async function renameFile(source, dest) {
8253
8397
  throw new Error(`Error renaming ${descriptorSource.isFile() ? "file" : "directory"} "${source}" to "${dest}": ${error}`);
8254
8398
  }
8255
8399
  }
8400
+ /**
8401
+ * @description Copies a file or directory.
8402
+ * @summary Creates a copy of a file or directory from the source path to the destination path.
8403
+ *
8404
+ * @param {string} source - The source path of the file or directory.
8405
+ * @param {string} dest - The destination path for the file or directory.
8406
+ * @return {void}
8407
+ *
8408
+ * @function copyFile
8409
+ *
8410
+ * @memberOf module:utils
8411
+ */
8256
8412
  function copyFile(source, dest) {
8257
8413
  const log = logger.for(copyFile);
8258
8414
  let descriptorSource, descriptorDest;
@@ -8283,6 +8439,17 @@ function copyFile(source, dest) {
8283
8439
  throw new Error(`Error copying ${descriptorSource.isFile() ? "file" : "directory"} "${source}" to "${dest}: ${error}`);
8284
8440
  }
8285
8441
  }
8442
+ /**
8443
+ * @description Deletes a file or directory.
8444
+ * @summary Removes a file or directory at the specified path, with recursive and force options enabled.
8445
+ *
8446
+ * @param {string} p - The path to the file or directory to delete.
8447
+ * @return {void}
8448
+ *
8449
+ * @function deletePath
8450
+ *
8451
+ * @memberOf module:utils
8452
+ */
8286
8453
  function deletePath(p) {
8287
8454
  const log = logger.for(deletePath);
8288
8455
  try {
@@ -8350,7 +8517,7 @@ function getPackage(p = process.cwd(), property) {
8350
8517
  * @param {string} [p=process.cwd()] - The directory path where the package.json file is located.
8351
8518
  * @return {string} The version string from package.json.
8352
8519
  * @function getPackageVersion
8353
- * @memberOf module:fs-utils
8520
+ * @memberOf module:utils
8354
8521
  */
8355
8522
  function getPackageVersion(p = process.cwd()) {
8356
8523
  return getPackage(p, "version");
@@ -8374,7 +8541,7 @@ function getPackageVersion(p = process.cwd()) {
8374
8541
  * JSON-->>getDependencies: Return parsed object
8375
8542
  * getDependencies->>getDependencies: Process dependencies
8376
8543
  * getDependencies-->>Caller: Return processed dependencies
8377
- * @memberOf module:fs-utils
8544
+ * @memberOf module:utils
8378
8545
  */
8379
8546
  async function getDependencies(path = process.cwd()) {
8380
8547
  let pkg;
@@ -9202,6 +9369,7 @@ var slogans = [
9202
9369
  /**
9203
9370
  * @description Array of ANSI color codes for banner styling.
9204
9371
  * @summary Defines a set of ANSI color codes used to style the banner text.
9372
+ * @memberOf module:utils
9205
9373
  */
9206
9374
  const colors = [
9207
9375
  "\x1b[38;5;215m", // soft orange
@@ -9218,6 +9386,7 @@ const colors = [
9218
9386
  * @description Prints a styled banner to the console.
9219
9387
  * @summary Generates and prints a colorful ASCII art banner with a random slogan.
9220
9388
  * @param {Logger} [logger] - Optional logger for verbose output.
9389
+ * @memberOf module:utils
9221
9390
  * @function printBanner
9222
9391
  * @mermaid
9223
9392
  * sequenceDiagram
@@ -9260,6 +9429,7 @@ function printBanner(logger) {
9260
9429
  * @param {number} [i] - Optional index to retrieve a specific slogan.
9261
9430
  * @return {string} The selected slogan.
9262
9431
  * @function getSlogan
9432
+ * @memberOf module:utils
9263
9433
  * @mermaid
9264
9434
  * sequenceDiagram
9265
9435
  * participant getSlogan
@@ -9290,10 +9460,11 @@ function getSlogan(i) {
9290
9460
  }
9291
9461
 
9292
9462
  /**
9293
- * @function isBrowser
9294
9463
  * @description Determines if the current environment is a browser by checking the prototype chain of the global object.
9295
9464
  * @summary Checks if the code is running in a browser environment.
9296
- * @returns {boolean} True if the environment is a browser, false otherwise.
9465
+ * @return {boolean} True if the environment is a browser, false otherwise.
9466
+ * @function isBrowser
9467
+ * @memberOf module:utils
9297
9468
  */
9298
9469
  function isBrowser() {
9299
9470
  return (Object.getPrototypeOf(Object.getPrototypeOf(globalThis)) !==
@@ -9476,6 +9647,12 @@ class Environment extends ObjectAccumulator {
9476
9647
  constructor() {
9477
9648
  super();
9478
9649
  }
9650
+ /**
9651
+ * @description Retrieves a value from the environment
9652
+ * @summary Gets a value from the environment variables, handling browser and Node.js environments differently
9653
+ * @param {string} k - The key to retrieve from the environment
9654
+ * @return {unknown} The value from the environment, or undefined if not found
9655
+ */
9479
9656
  fromEnv(k) {
9480
9657
  let env;
9481
9658
  if (isBrowser()) {
@@ -9487,6 +9664,13 @@ class Environment extends ObjectAccumulator {
9487
9664
  }
9488
9665
  return env[k];
9489
9666
  }
9667
+ /**
9668
+ * @description Expands an object into the environment
9669
+ * @summary Defines properties on the environment object that can be accessed as getters and setters
9670
+ * @template V - Type of the object being expanded
9671
+ * @param {V} value - The object to expand into the environment
9672
+ * @return {void}
9673
+ */
9490
9674
  expand(value) {
9491
9675
  Object.entries(value).forEach(([k, v]) => {
9492
9676
  Object.defineProperty(this, k, {
@@ -9548,7 +9732,7 @@ class Environment extends ObjectAccumulator {
9548
9732
  * @abstract
9549
9733
  * @template I - The type of input options for the command.
9550
9734
  * @template R - The return type of the command execution.
9551
- * @memberOf utils/cli
9735
+ * @memberOf module:utils
9552
9736
  * @description Abstract base class for command implementation.
9553
9737
  * @summary Provides a structure for creating command-line interface commands with input handling, logging, and execution flow.
9554
9738
  *
@@ -9689,7 +9873,7 @@ class Command {
9689
9873
  * @summary This class provides functionality to download files from HTTPS URLs.
9690
9874
  * It uses Node.js built-in https module to make requests.
9691
9875
  *
9692
- * @class
9876
+ * @class HttpClient
9693
9877
  */
9694
9878
  class HttpClient {
9695
9879
  static { this.log = Logging.for(HttpClient); }
@@ -9780,7 +9964,7 @@ const options = {
9780
9964
  default: false,
9781
9965
  },
9782
9966
  };
9783
- const cjs2Transformer = () => {
9967
+ const cjs2Transformer = (ext = ".cjs") => {
9784
9968
  const log = BuildScripts.log.for(cjs2Transformer);
9785
9969
  const resolutionCache = new Map();
9786
9970
  return (transformationContext) => {
@@ -9815,10 +9999,9 @@ const cjs2Transformer = () => {
9815
9999
  resolvedPath = resolvedPath.replace(/\.ts$/gm, "/index.ts");
9816
10000
  if (path.isAbsolute(resolvedPath)) {
9817
10001
  const extension = (/\.tsx?$/.exec(path.basename(resolvedPath)) || [])[0] || void 0;
9818
- const mappedExtension = ".cjs";
9819
10002
  resolvedPath =
9820
10003
  "./" +
9821
- path.relative(sourceDir, path.resolve(path.dirname(resolvedPath), path.basename(resolvedPath, extension) + mappedExtension));
10004
+ path.relative(sourceDir, path.resolve(path.dirname(resolvedPath), path.basename(resolvedPath, extension) + ext));
9822
10005
  }
9823
10006
  resolutionCache.set(cacheKey, resolvedPath);
9824
10007
  return resolvedPath;
@@ -9941,7 +10124,10 @@ class BuildScripts extends Command {
9941
10124
  const program = ts__namespace.createProgram(tsConfig.fileNames, tsConfig.options);
9942
10125
  const transformations = {};
9943
10126
  if (mode === Modes.CJS) {
9944
- transformations.before = [cjs2Transformer()];
10127
+ transformations.before = [cjs2Transformer(".cjs")];
10128
+ }
10129
+ else if (mode === Modes.ESM) {
10130
+ transformations.before = [cjs2Transformer(".js")];
9945
10131
  }
9946
10132
  const emitResult = program.emit(undefined, undefined, undefined, undefined, transformations);
9947
10133
  const allDiagnostics = ts__namespace
@@ -10159,4 +10345,4 @@ new BuildScripts()
10159
10345
  BuildScripts.log.error(`Error building scripts: ${e}`);
10160
10346
  process.exit(1);
10161
10347
  });
10162
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtc2NyaXB0cy5janMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvdXRpbC9hY3Rpb24uanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L3V0aWwvc3RyaXAuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L3V0aWwvY2xlYXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L3V0aWwvZmlndXJlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvdXRpbC9zdHlsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvdXRpbC9saW5lcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvdXRpbC93cmFwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC91dGlsL2VudHJpZXNUb0Rpc3BsYXkuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L3V0aWwvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2VsZW1lbnRzL3Byb21wdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZWxlbWVudHMvdGV4dC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZWxlbWVudHMvc2VsZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy90b2dnbGUuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2RhdGVwYXJ0cy9kYXRlcGFydC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZGF0ZXBhcnRzL21lcmlkaWVtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9kYXRlcGFydHMvZGF5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9kYXRlcGFydHMvaG91cnMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2RhdGVwYXJ0cy9taWxsaXNlY29uZHMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2RhdGVwYXJ0cy9taW51dGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9kYXRlcGFydHMvbW9udGguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2RhdGVwYXJ0cy9zZWNvbmRzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9kYXRlcGFydHMveWVhci5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZGF0ZXBhcnRzL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy9kYXRlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy9udW1iZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2VsZW1lbnRzL211bHRpc2VsZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy9hdXRvY29tcGxldGUuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2VsZW1lbnRzL2F1dG9jb21wbGV0ZU11bHRpc2VsZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy9jb25maXJtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvcHJvbXB0cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvdXRpbC9hY3Rpb24uanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvdXRpbC9zdHJpcC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi91dGlsL2NsZWFyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL3V0aWwvZmlndXJlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi91dGlsL3N0eWxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL3V0aWwvbGluZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvdXRpbC93cmFwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL3V0aWwvZW50cmllc1RvRGlzcGxheS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi91dGlsL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2VsZW1lbnRzL3Byb21wdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9lbGVtZW50cy90ZXh0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2VsZW1lbnRzL3NlbGVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9lbGVtZW50cy90b2dnbGUuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZGF0ZXBhcnRzL2RhdGVwYXJ0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2RhdGVwYXJ0cy9tZXJpZGllbS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMvZGF5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2RhdGVwYXJ0cy9ob3Vycy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMvbWlsbGlzZWNvbmRzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2RhdGVwYXJ0cy9taW51dGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2RhdGVwYXJ0cy9tb250aC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMvc2Vjb25kcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMveWVhci5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZWxlbWVudHMvZGF0ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9lbGVtZW50cy9udW1iZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZWxlbWVudHMvbXVsdGlzZWxlY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZWxlbWVudHMvYXV0b2NvbXBsZXRlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2VsZW1lbnRzL2F1dG9jb21wbGV0ZU11bHRpc2VsZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2VsZW1lbnRzL2NvbmZpcm0uanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZWxlbWVudHMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvcHJvbXB0cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BkZWNhZi10cy9sb2dnaW5nL2xpYi9lc20vY29uc3RhbnRzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3N0eWxlZC1zdHJpbmctYnVpbGRlci9saWIvZXNtL2NvbnN0YW50cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9zdHlsZWQtc3RyaW5nLWJ1aWxkZXIvbGliL2VzbS9jb2xvcnMuanMiLCIuLi9ub2RlX21vZHVsZXMvc3R5bGVkLXN0cmluZy1idWlsZGVyL2xpYi9lc20vc3RyaW5ncy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGVjYWYtdHMvbG9nZ2luZy9saWIvZXNtL2xvZ2dpbmcuanMiLCIuLi9zcmMvaW5wdXQvaW5wdXQudHMiLCIuLi9zcmMvY2xpL2NvbnN0YW50cy50cyIsIi4uL3NyYy91dGlscy90ZXh0LnRzIiwiLi4vc3JjL3V0aWxzL2NvbnN0YW50cy50cyIsIi4uL3NyYy93cml0ZXJzL1N0YW5kYXJkT3V0cHV0V3JpdGVyLnRzIiwiLi4vc3JjL3V0aWxzL3V0aWxzLnRzIiwiLi4vc3JjL3V0aWxzL2ZzLnRzIiwiLi4vc3JjL291dHB1dC9jb21tb24udHMiLCIuLi9zcmMvdXRpbHMvd2ViLnRzIiwiLi4vbm9kZV9tb2R1bGVzL3R5cGVkLW9iamVjdC1hY2N1bXVsYXRvci9saWIvZXNtL2FjY3VtdWxhdG9yLmpzIiwiLi4vc3JjL3V0aWxzL2Vudmlyb25tZW50LnRzIiwiLi4vc3JjL2NsaS9jb21tYW5kLnRzIiwiLi4vc3JjL3V0aWxzL2h0dHAudHMiLCIuLi9zcmMvY2xpL2NvbW1hbmRzL2J1aWxkLXNjcmlwdHMudHMiLCIuLi9zcmMvYmluL2J1aWxkLXNjcmlwdHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChrZXksIGlzU2VsZWN0KSA9PiB7XG4gIGlmIChrZXkubWV0YSAmJiBrZXkubmFtZSAhPT0gJ2VzY2FwZScpIHJldHVybjtcblxuICBpZiAoa2V5LmN0cmwpIHtcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdhJykgcmV0dXJuICdmaXJzdCc7XG4gICAgaWYgKGtleS5uYW1lID09PSAnYycpIHJldHVybiAnYWJvcnQnO1xuICAgIGlmIChrZXkubmFtZSA9PT0gJ2QnKSByZXR1cm4gJ2Fib3J0JztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdlJykgcmV0dXJuICdsYXN0JztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdnJykgcmV0dXJuICdyZXNldCc7XG4gIH1cblxuICBpZiAoaXNTZWxlY3QpIHtcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdqJykgcmV0dXJuICdkb3duJztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdrJykgcmV0dXJuICd1cCc7XG4gIH1cblxuICBpZiAoa2V5Lm5hbWUgPT09ICdyZXR1cm4nKSByZXR1cm4gJ3N1Ym1pdCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2VudGVyJykgcmV0dXJuICdzdWJtaXQnOyAvLyBjdHJsICsgSlxuXG4gIGlmIChrZXkubmFtZSA9PT0gJ2JhY2tzcGFjZScpIHJldHVybiAnZGVsZXRlJztcbiAgaWYgKGtleS5uYW1lID09PSAnZGVsZXRlJykgcmV0dXJuICdkZWxldGVGb3J3YXJkJztcbiAgaWYgKGtleS5uYW1lID09PSAnYWJvcnQnKSByZXR1cm4gJ2Fib3J0JztcbiAgaWYgKGtleS5uYW1lID09PSAnZXNjYXBlJykgcmV0dXJuICdleGl0JztcbiAgaWYgKGtleS5uYW1lID09PSAndGFiJykgcmV0dXJuICduZXh0JztcbiAgaWYgKGtleS5uYW1lID09PSAncGFnZWRvd24nKSByZXR1cm4gJ25leHRQYWdlJztcbiAgaWYgKGtleS5uYW1lID09PSAncGFnZXVwJykgcmV0dXJuICdwcmV2UGFnZSc7IC8vIFRPRE8gY3JlYXRlIGhvbWUoKSBpbiBwcm9tcHQgdHlwZXMgKGUuZy4gVGV4dFByb21wdClcblxuICBpZiAoa2V5Lm5hbWUgPT09ICdob21lJykgcmV0dXJuICdob21lJzsgLy8gVE9ETyBjcmVhdGUgZW5kKCkgaW4gcHJvbXB0IHR5cGVzIChlLmcuIFRleHRQcm9tcHQpXG5cbiAgaWYgKGtleS5uYW1lID09PSAnZW5kJykgcmV0dXJuICdlbmQnO1xuICBpZiAoa2V5Lm5hbWUgPT09ICd1cCcpIHJldHVybiAndXAnO1xuICBpZiAoa2V5Lm5hbWUgPT09ICdkb3duJykgcmV0dXJuICdkb3duJztcbiAgaWYgKGtleS5uYW1lID09PSAncmlnaHQnKSByZXR1cm4gJ3JpZ2h0JztcbiAgaWYgKGtleS5uYW1lID09PSAnbGVmdCcpIHJldHVybiAnbGVmdCc7XG4gIHJldHVybiBmYWxzZTtcbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0ciA9PiB7XG4gIGNvbnN0IHBhdHRlcm4gPSBbJ1tcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNyknLCAnKD86KD86XFxcXGR7MSw0fSg/OjtcXFxcZHswLDR9KSopP1tcXFxcZEEtUFJaY2YtbnRxcnk9Pjx+XSkpJ10uam9pbignfCcpO1xuICBjb25zdCBSR1ggPSBuZXcgUmVnRXhwKHBhdHRlcm4sICdnJyk7XG4gIHJldHVybiB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJyA/IHN0ci5yZXBsYWNlKFJHWCwgJycpIDogc3RyO1xufTsiLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKG8sIGFsbG93QXJyYXlMaWtlKSB7IHZhciBpdCA9IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdIHx8IG9bXCJAQGl0ZXJhdG9yXCJdOyBpZiAoIWl0KSB7IGlmIChBcnJheS5pc0FycmF5KG8pIHx8IChpdCA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvKSkgfHwgYWxsb3dBcnJheUxpa2UgJiYgbyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHsgaWYgKGl0KSBvID0gaXQ7IHZhciBpID0gMDsgdmFyIEYgPSBmdW5jdGlvbiBGKCkge307IHJldHVybiB7IHM6IEYsIG46IGZ1bmN0aW9uIG4oKSB7IGlmIChpID49IG8ubGVuZ3RoKSByZXR1cm4geyBkb25lOiB0cnVlIH07IHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogb1tpKytdIH07IH0sIGU6IGZ1bmN0aW9uIGUoX2UpIHsgdGhyb3cgX2U7IH0sIGY6IEYgfTsgfSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH0gdmFyIG5vcm1hbENvbXBsZXRpb24gPSB0cnVlLCBkaWRFcnIgPSBmYWxzZSwgZXJyOyByZXR1cm4geyBzOiBmdW5jdGlvbiBzKCkgeyBpdCA9IGl0LmNhbGwobyk7IH0sIG46IGZ1bmN0aW9uIG4oKSB7IHZhciBzdGVwID0gaXQubmV4dCgpOyBub3JtYWxDb21wbGV0aW9uID0gc3RlcC5kb25lOyByZXR1cm4gc3RlcDsgfSwgZTogZnVuY3Rpb24gZShfZTIpIHsgZGlkRXJyID0gdHJ1ZTsgZXJyID0gX2UyOyB9LCBmOiBmdW5jdGlvbiBmKCkgeyB0cnkgeyBpZiAoIW5vcm1hbENvbXBsZXRpb24gJiYgaXQucmV0dXJuICE9IG51bGwpIGl0LnJldHVybigpOyB9IGZpbmFsbHkgeyBpZiAoZGlkRXJyKSB0aHJvdyBlcnI7IH0gfSB9OyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldOyByZXR1cm4gYXJyMjsgfVxuXG5jb25zdCBzdHJpcCA9IHJlcXVpcmUoJy4vc3RyaXAnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBlcmFzZSA9IF9yZXF1aXJlLmVyYXNlLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUuY3Vyc29yO1xuXG5jb25zdCB3aWR0aCA9IHN0ciA9PiBbLi4uc3RyaXAoc3RyKV0ubGVuZ3RoO1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvbXB0XG4gKiBAcGFyYW0ge251bWJlcn0gcGVyTGluZVxuICovXG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocHJvbXB0LCBwZXJMaW5lKSB7XG4gIGlmICghcGVyTGluZSkgcmV0dXJuIGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCk7XG4gIGxldCByb3dzID0gMDtcbiAgY29uc3QgbGluZXMgPSBwcm9tcHQuc3BsaXQoL1xccj9cXG4vKTtcblxuICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIobGluZXMpLFxuICAgICAgX3N0ZXA7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgbGV0IGxpbmUgPSBfc3RlcC52YWx1ZTtcbiAgICAgIHJvd3MgKz0gMSArIE1hdGguZmxvb3IoTWF0aC5tYXgod2lkdGgobGluZSkgLSAxLCAwKSAvIHBlckxpbmUpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2l0ZXJhdG9yLmUoZXJyKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBfaXRlcmF0b3IuZigpO1xuICB9XG5cbiAgcmV0dXJuIGVyYXNlLmxpbmVzKHJvd3MpO1xufTsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IG1haW4gPSB7XG4gIGFycm93VXA6ICfihpEnLFxuICBhcnJvd0Rvd246ICfihpMnLFxuICBhcnJvd0xlZnQ6ICfihpAnLFxuICBhcnJvd1JpZ2h0OiAn4oaSJyxcbiAgcmFkaW9PbjogJ+KXiScsXG4gIHJhZGlvT2ZmOiAn4pevJyxcbiAgdGljazogJ+KclCcsXG4gIGNyb3NzOiAn4pyWJyxcbiAgZWxsaXBzaXM6ICfigKYnLFxuICBwb2ludGVyU21hbGw6ICfigLonLFxuICBsaW5lOiAn4pSAJyxcbiAgcG9pbnRlcjogJ+Kdrydcbn07XG5jb25zdCB3aW4gPSB7XG4gIGFycm93VXA6IG1haW4uYXJyb3dVcCxcbiAgYXJyb3dEb3duOiBtYWluLmFycm93RG93bixcbiAgYXJyb3dMZWZ0OiBtYWluLmFycm93TGVmdCxcbiAgYXJyb3dSaWdodDogbWFpbi5hcnJvd1JpZ2h0LFxuICByYWRpb09uOiAnKCopJyxcbiAgcmFkaW9PZmY6ICcoICknLFxuICB0aWNrOiAn4oiaJyxcbiAgY3Jvc3M6ICfDlycsXG4gIGVsbGlwc2lzOiAnLi4uJyxcbiAgcG9pbnRlclNtYWxsOiAnwrsnLFxuICBsaW5lOiAn4pSAJyxcbiAgcG9pbnRlcjogJz4nXG59O1xuY29uc3QgZmlndXJlcyA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyB3aW4gOiBtYWluO1xubW9kdWxlLmV4cG9ydHMgPSBmaWd1cmVzOyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgYyA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5cbmNvbnN0IGZpZ3VyZXMgPSByZXF1aXJlKCcuL2ZpZ3VyZXMnKTsgLy8gcmVuZGVyaW5nIHVzZXIgaW5wdXQuXG5cblxuY29uc3Qgc3R5bGVzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHBhc3N3b3JkOiB7XG4gICAgc2NhbGU6IDEsXG4gICAgcmVuZGVyOiBpbnB1dCA9PiAnKicucmVwZWF0KGlucHV0Lmxlbmd0aClcbiAgfSxcbiAgZW1vamk6IHtcbiAgICBzY2FsZTogMixcbiAgICByZW5kZXI6IGlucHV0ID0+ICfwn5iDJy5yZXBlYXQoaW5wdXQubGVuZ3RoKVxuICB9LFxuICBpbnZpc2libGU6IHtcbiAgICBzY2FsZTogMCxcbiAgICByZW5kZXI6IGlucHV0ID0+ICcnXG4gIH0sXG4gIGRlZmF1bHQ6IHtcbiAgICBzY2FsZTogMSxcbiAgICByZW5kZXI6IGlucHV0ID0+IGAke2lucHV0fWBcbiAgfVxufSk7XG5cbmNvbnN0IHJlbmRlciA9IHR5cGUgPT4gc3R5bGVzW3R5cGVdIHx8IHN0eWxlcy5kZWZhdWx0OyAvLyBpY29uIHRvIHNpZ25hbGl6ZSBhIHByb21wdC5cblxuXG5jb25zdCBzeW1ib2xzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIGFib3J0ZWQ6IGMucmVkKGZpZ3VyZXMuY3Jvc3MpLFxuICBkb25lOiBjLmdyZWVuKGZpZ3VyZXMudGljayksXG4gIGV4aXRlZDogYy55ZWxsb3coZmlndXJlcy5jcm9zcyksXG4gIGRlZmF1bHQ6IGMuY3lhbignPycpXG59KTtcblxuY29uc3Qgc3ltYm9sID0gKGRvbmUsIGFib3J0ZWQsIGV4aXRlZCkgPT4gYWJvcnRlZCA/IHN5bWJvbHMuYWJvcnRlZCA6IGV4aXRlZCA/IHN5bWJvbHMuZXhpdGVkIDogZG9uZSA/IHN5bWJvbHMuZG9uZSA6IHN5bWJvbHMuZGVmYXVsdDsgLy8gYmV0d2VlbiB0aGUgcXVlc3Rpb24gYW5kIHRoZSB1c2VyJ3MgaW5wdXQuXG5cblxuY29uc3QgZGVsaW1pdGVyID0gY29tcGxldGluZyA9PiBjLmdyYXkoY29tcGxldGluZyA/IGZpZ3VyZXMuZWxsaXBzaXMgOiBmaWd1cmVzLnBvaW50ZXJTbWFsbCk7XG5cbmNvbnN0IGl0ZW0gPSAoZXhwYW5kYWJsZSwgZXhwYW5kZWQpID0+IGMuZ3JheShleHBhbmRhYmxlID8gZXhwYW5kZWQgPyBmaWd1cmVzLnBvaW50ZXJTbWFsbCA6ICcrJyA6IGZpZ3VyZXMubGluZSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdHlsZXMsXG4gIHJlbmRlcixcbiAgc3ltYm9scyxcbiAgc3ltYm9sLFxuICBkZWxpbWl0ZXIsXG4gIGl0ZW1cbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBzdHJpcCA9IHJlcXVpcmUoJy4vc3RyaXAnKTtcbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1zZ1xuICogQHBhcmFtIHtudW1iZXJ9IHBlckxpbmVcbiAqL1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1zZywgcGVyTGluZSkge1xuICBsZXQgbGluZXMgPSBTdHJpbmcoc3RyaXAobXNnKSB8fCAnJykuc3BsaXQoL1xccj9cXG4vKTtcbiAgaWYgKCFwZXJMaW5lKSByZXR1cm4gbGluZXMubGVuZ3RoO1xuICByZXR1cm4gbGluZXMubWFwKGwgPT4gTWF0aC5jZWlsKGwubGVuZ3RoIC8gcGVyTGluZSkpLnJlZHVjZSgoYSwgYikgPT4gYSArIGIpO1xufTsiLCIndXNlIHN0cmljdCc7XG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBtc2cgVGhlIG1lc3NhZ2UgdG8gd3JhcFxuICogQHBhcmFtIHtvYmplY3R9IG9wdHNcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gW29wdHMubWFyZ2luXSBMZWZ0IG1hcmdpblxuICogQHBhcmFtIHtudW1iZXJ9IG9wdHMud2lkdGggTWF4aW11bSBjaGFyYWN0ZXJzIHBlciBsaW5lIGluY2x1ZGluZyB0aGUgbWFyZ2luXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSAobXNnLCBvcHRzID0ge30pID0+IHtcbiAgY29uc3QgdGFiID0gTnVtYmVyLmlzU2FmZUludGVnZXIocGFyc2VJbnQob3B0cy5tYXJnaW4pKSA/IG5ldyBBcnJheShwYXJzZUludChvcHRzLm1hcmdpbikpLmZpbGwoJyAnKS5qb2luKCcnKSA6IG9wdHMubWFyZ2luIHx8ICcnO1xuICBjb25zdCB3aWR0aCA9IG9wdHMud2lkdGg7XG4gIHJldHVybiAobXNnIHx8ICcnKS5zcGxpdCgvXFxyP1xcbi9nKS5tYXAobGluZSA9PiBsaW5lLnNwbGl0KC9cXHMrL2cpLnJlZHVjZSgoYXJyLCB3KSA9PiB7XG4gICAgaWYgKHcubGVuZ3RoICsgdGFiLmxlbmd0aCA+PSB3aWR0aCB8fCBhcnJbYXJyLmxlbmd0aCAtIDFdLmxlbmd0aCArIHcubGVuZ3RoICsgMSA8IHdpZHRoKSBhcnJbYXJyLmxlbmd0aCAtIDFdICs9IGAgJHt3fWA7ZWxzZSBhcnIucHVzaChgJHt0YWJ9JHt3fWApO1xuICAgIHJldHVybiBhcnI7XG4gIH0sIFt0YWJdKS5qb2luKCdcXG4nKSkuam9pbignXFxuJyk7XG59OyIsIid1c2Ugc3RyaWN0Jztcbi8qKlxuICogRGV0ZXJtaW5lIHdoYXQgZW50cmllcyBzaG91bGQgYmUgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW4sIGJhc2VkIG9uIHRoZVxuICogY3VycmVudGx5IHNlbGVjdGVkIGluZGV4IGFuZCB0aGUgbWF4aW11bSB2aXNpYmxlLiBVc2VkIGluIGxpc3QtYmFzZWRcbiAqIHByb21wdHMgbGlrZSBgc2VsZWN0YCBhbmQgYG11bHRpc2VsZWN0YC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gY3Vyc29yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZW50cnlcbiAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbCB0aGUgdG90YWwgZW50cmllcyBhdmFpbGFibGUgdG8gZGlzcGxheVxuICogQHBhcmFtIHtudW1iZXJ9IFttYXhWaXNpYmxlXSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhhdCBjYW4gYmUgZGlzcGxheWVkXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSAoY3Vyc29yLCB0b3RhbCwgbWF4VmlzaWJsZSkgPT4ge1xuICBtYXhWaXNpYmxlID0gbWF4VmlzaWJsZSB8fCB0b3RhbDtcbiAgbGV0IHN0YXJ0SW5kZXggPSBNYXRoLm1pbih0b3RhbCAtIG1heFZpc2libGUsIGN1cnNvciAtIE1hdGguZmxvb3IobWF4VmlzaWJsZSAvIDIpKTtcbiAgaWYgKHN0YXJ0SW5kZXggPCAwKSBzdGFydEluZGV4ID0gMDtcbiAgbGV0IGVuZEluZGV4ID0gTWF0aC5taW4oc3RhcnRJbmRleCArIG1heFZpc2libGUsIHRvdGFsKTtcbiAgcmV0dXJuIHtcbiAgICBzdGFydEluZGV4LFxuICAgIGVuZEluZGV4XG4gIH07XG59OyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFjdGlvbjogcmVxdWlyZSgnLi9hY3Rpb24nKSxcbiAgY2xlYXI6IHJlcXVpcmUoJy4vY2xlYXInKSxcbiAgc3R5bGU6IHJlcXVpcmUoJy4vc3R5bGUnKSxcbiAgc3RyaXA6IHJlcXVpcmUoJy4vc3RyaXAnKSxcbiAgZmlndXJlczogcmVxdWlyZSgnLi9maWd1cmVzJyksXG4gIGxpbmVzOiByZXF1aXJlKCcuL2xpbmVzJyksXG4gIHdyYXA6IHJlcXVpcmUoJy4vd3JhcCcpLFxuICBlbnRyaWVzVG9EaXNwbGF5OiByZXF1aXJlKCcuL2VudHJpZXNUb0Rpc3BsYXknKVxufTsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHJlYWRsaW5lID0gcmVxdWlyZSgncmVhZGxpbmUnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCcuLi91dGlsJyksXG4gICAgICBhY3Rpb24gPSBfcmVxdWlyZS5hY3Rpb247XG5cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpO1xuXG5jb25zdCBfcmVxdWlyZTIgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBiZWVwID0gX3JlcXVpcmUyLmJlZXAsXG4gICAgICBjdXJzb3IgPSBfcmVxdWlyZTIuY3Vyc29yO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG4vKipcbiAqIEJhc2UgcHJvbXB0IHNrZWxldG9uXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqL1xuXG5cbmNsYXNzIFByb21wdCBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5maXJzdFJlbmRlciA9IHRydWU7XG4gICAgdGhpcy5pbiA9IG9wdHMuc3RkaW4gfHwgcHJvY2Vzcy5zdGRpbjtcbiAgICB0aGlzLm91dCA9IG9wdHMuc3Rkb3V0IHx8IHByb2Nlc3Muc3Rkb3V0O1xuXG4gICAgdGhpcy5vblJlbmRlciA9IChvcHRzLm9uUmVuZGVyIHx8ICgoKSA9PiB2b2lkIDApKS5iaW5kKHRoaXMpO1xuXG4gICAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgICAgaW5wdXQ6IHRoaXMuaW4sXG4gICAgICBlc2NhcGVDb2RlVGltZW91dDogNTBcbiAgICB9KTtcbiAgICByZWFkbGluZS5lbWl0S2V5cHJlc3NFdmVudHModGhpcy5pbiwgcmwpO1xuICAgIGlmICh0aGlzLmluLmlzVFRZKSB0aGlzLmluLnNldFJhd01vZGUodHJ1ZSk7XG4gICAgY29uc3QgaXNTZWxlY3QgPSBbJ1NlbGVjdFByb21wdCcsICdNdWx0aXNlbGVjdFByb21wdCddLmluZGV4T2YodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKSA+IC0xO1xuXG4gICAgY29uc3Qga2V5cHJlc3MgPSAoc3RyLCBrZXkpID0+IHtcbiAgICAgIGxldCBhID0gYWN0aW9uKGtleSwgaXNTZWxlY3QpO1xuXG4gICAgICBpZiAoYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fICYmIHRoaXMuXyhzdHIsIGtleSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzW2FdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXNbYV0oa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYmVsbCgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmNsb3NlID0gKCkgPT4ge1xuICAgICAgdGhpcy5vdXQud3JpdGUoY3Vyc29yLnNob3cpO1xuICAgICAgdGhpcy5pbi5yZW1vdmVMaXN0ZW5lcigna2V5cHJlc3MnLCBrZXlwcmVzcyk7XG4gICAgICBpZiAodGhpcy5pbi5pc1RUWSkgdGhpcy5pbi5zZXRSYXdNb2RlKGZhbHNlKTtcbiAgICAgIHJsLmNsb3NlKCk7XG4gICAgICB0aGlzLmVtaXQodGhpcy5hYm9ydGVkID8gJ2Fib3J0JyA6IHRoaXMuZXhpdGVkID8gJ2V4aXQnIDogJ3N1Ym1pdCcsIHRoaXMudmFsdWUpO1xuICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgIH07XG5cbiAgICB0aGlzLmluLm9uKCdrZXlwcmVzcycsIGtleXByZXNzKTtcbiAgfVxuXG4gIGZpcmUoKSB7XG4gICAgdGhpcy5lbWl0KCdzdGF0ZScsIHtcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgYWJvcnRlZDogISF0aGlzLmFib3J0ZWQsXG4gICAgICBleGl0ZWQ6ICEhdGhpcy5leGl0ZWRcbiAgICB9KTtcbiAgfVxuXG4gIGJlbGwoKSB7XG4gICAgdGhpcy5vdXQud3JpdGUoYmVlcCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5vblJlbmRlcihjb2xvcik7XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMuZmlyc3RSZW5kZXIgPSBmYWxzZTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbXB0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7IHRyeSB7IHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTsgdmFyIHZhbHVlID0gaW5mby52YWx1ZTsgfSBjYXRjaCAoZXJyb3IpIHsgcmVqZWN0KGVycm9yKTsgcmV0dXJuOyB9IGlmIChpbmZvLmRvbmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0gZWxzZSB7IFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTsgfSB9XG5cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHZhciBzZWxmID0gdGhpcywgYXJncyA9IGFyZ3VtZW50czsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpOyBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7IH0gZnVuY3Rpb24gX3Rocm93KGVycikgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTsgfSBfbmV4dCh1bmRlZmluZWQpOyB9KTsgfTsgfVxuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5cbmNvbnN0IFByb21wdCA9IHJlcXVpcmUoJy4vcHJvbXB0Jyk7XG5cbmNvbnN0IF9yZXF1aXJlID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpLFxuICAgICAgZXJhc2UgPSBfcmVxdWlyZS5lcmFzZSxcbiAgICAgIGN1cnNvciA9IF9yZXF1aXJlLmN1cnNvcjtcblxuY29uc3QgX3JlcXVpcmUyID0gcmVxdWlyZSgnLi4vdXRpbCcpLFxuICAgICAgc3R5bGUgPSBfcmVxdWlyZTIuc3R5bGUsXG4gICAgICBjbGVhciA9IF9yZXF1aXJlMi5jbGVhcixcbiAgICAgIGxpbmVzID0gX3JlcXVpcmUyLmxpbmVzLFxuICAgICAgZmlndXJlcyA9IF9yZXF1aXJlMi5maWd1cmVzO1xuLyoqXG4gKiBUZXh0UHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuc3R5bGU9J2RlZmF1bHQnXSBSZW5kZXIgc3R5bGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbml0aWFsXSBEZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy52YWxpZGF0ZV0gVmFsaWRhdGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmVycm9yXSBUaGUgaW52YWxpZCBlcnJvciBsYWJlbFxuICovXG5cblxuY2xhc3MgVGV4dFByb21wdCBleHRlbmRzIFByb21wdCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMudHJhbnNmb3JtID0gc3R5bGUucmVuZGVyKG9wdHMuc3R5bGUpO1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmluaXRpYWwgPSBvcHRzLmluaXRpYWwgfHwgYGA7XG5cbiAgICB0aGlzLnZhbGlkYXRvciA9IG9wdHMudmFsaWRhdGUgfHwgKCgpID0+IHRydWUpO1xuXG4gICAgdGhpcy52YWx1ZSA9IGBgO1xuICAgIHRoaXMuZXJyb3JNc2cgPSBvcHRzLmVycm9yIHx8IGBQbGVhc2UgRW50ZXIgQSBWYWxpZCBWYWx1ZWA7XG4gICAgdGhpcy5jdXJzb3IgPSBOdW1iZXIoISF0aGlzLmluaXRpYWwpO1xuICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmNsZWFyID0gY2xlYXIoYGAsIHRoaXMub3V0LmNvbHVtbnMpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgdmFsdWUodikge1xuICAgIGlmICghdiAmJiB0aGlzLmluaXRpYWwpIHtcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSB0cnVlO1xuICAgICAgdGhpcy5yZW5kZXJlZCA9IGNvbG9yLmdyYXkodGhpcy50cmFuc2Zvcm0ucmVuZGVyKHRoaXMuaW5pdGlhbCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gZmFsc2U7XG4gICAgICB0aGlzLnJlbmRlcmVkID0gdGhpcy50cmFuc2Zvcm0ucmVuZGVyKHYpO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICB0aGlzLmZpcmUoKTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5jdXJzb3IgPSBOdW1iZXIoISF0aGlzLmluaXRpYWwpO1xuICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZSB8fCB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICB2YWxpZGF0ZSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBsZXQgdmFsaWQgPSB5aWVsZCBfdGhpcy52YWxpZGF0b3IoX3RoaXMudmFsdWUpO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbGlkID09PSBgc3RyaW5nYCkge1xuICAgICAgICBfdGhpcy5lcnJvck1zZyA9IHZhbGlkO1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5lcnJvciA9ICF2YWxpZDtcbiAgICB9KSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBfdGhpczIudmFsdWUgPSBfdGhpczIudmFsdWUgfHwgX3RoaXMyLmluaXRpYWw7XG4gICAgICBfdGhpczIuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICAgIF90aGlzMi5jdXJzb3IgPSBfdGhpczIucmVuZGVyZWQubGVuZ3RoO1xuICAgICAgeWllbGQgX3RoaXMyLnZhbGlkYXRlKCk7XG5cbiAgICAgIGlmIChfdGhpczIuZXJyb3IpIHtcbiAgICAgICAgX3RoaXMyLnJlZCA9IHRydWU7XG5cbiAgICAgICAgX3RoaXMyLmZpcmUoKTtcblxuICAgICAgICBfdGhpczIucmVuZGVyKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpczIuZG9uZSA9IHRydWU7XG4gICAgICBfdGhpczIuYWJvcnRlZCA9IGZhbHNlO1xuXG4gICAgICBfdGhpczIuZmlyZSgpO1xuXG4gICAgICBfdGhpczIucmVuZGVyKCk7XG5cbiAgICAgIF90aGlzMi5vdXQud3JpdGUoJ1xcbicpO1xuXG4gICAgICBfdGhpczIuY2xvc2UoKTtcbiAgICB9KSgpO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICBpZiAoIXRoaXMucGxhY2Vob2xkZXIpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5pbml0aWFsO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5yZW5kZXJlZC5sZW5ndGg7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKSByZXR1cm47XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmN1cnNvciArIG47XG4gICAgdGhpcy5jdXJzb3JPZmZzZXQgKz0gbjtcbiAgfVxuXG4gIF8oYywga2V5KSB7XG4gICAgbGV0IHMxID0gdGhpcy52YWx1ZS5zbGljZSgwLCB0aGlzLmN1cnNvcik7XG4gICAgbGV0IHMyID0gdGhpcy52YWx1ZS5zbGljZSh0aGlzLmN1cnNvcik7XG4gICAgdGhpcy52YWx1ZSA9IGAke3MxfSR7Y30ke3MyfWA7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMucGxhY2Vob2xkZXIgPyAwIDogczEubGVuZ3RoICsgMTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlKCkge1xuICAgIGlmICh0aGlzLmlzQ3Vyc29yQXRTdGFydCgpKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgbGV0IHMxID0gdGhpcy52YWx1ZS5zbGljZSgwLCB0aGlzLmN1cnNvciAtIDEpO1xuICAgIGxldCBzMiA9IHRoaXMudmFsdWUuc2xpY2UodGhpcy5jdXJzb3IpO1xuICAgIHRoaXMudmFsdWUgPSBgJHtzMX0ke3MyfWA7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmlzQ3Vyc29yQXRTdGFydCgpKSB7XG4gICAgICB0aGlzLmN1cnNvck9mZnNldCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3Vyc29yT2Zmc2V0Kys7XG4gICAgICB0aGlzLm1vdmVDdXJzb3IoLTEpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGVGb3J3YXJkKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciAqIHRoaXMuc2NhbGUgPj0gdGhpcy5yZW5kZXJlZC5sZW5ndGggfHwgdGhpcy5wbGFjZWhvbGRlcikgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIGxldCBzMSA9IHRoaXMudmFsdWUuc2xpY2UoMCwgdGhpcy5jdXJzb3IpO1xuICAgIGxldCBzMiA9IHRoaXMudmFsdWUuc2xpY2UodGhpcy5jdXJzb3IgKyAxKTtcbiAgICB0aGlzLnZhbHVlID0gYCR7czF9JHtzMn1gO1xuICAgIHRoaXMucmVkID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5pc0N1cnNvckF0RW5kKCkpIHtcbiAgICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJzb3JPZmZzZXQrKztcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZmlyc3QoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsYXN0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy52YWx1ZS5sZW5ndGg7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxlZnQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yIDw9IDAgfHwgdGhpcy5wbGFjZWhvbGRlcikgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcigtMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJpZ2h0KCkge1xuICAgIGlmICh0aGlzLmN1cnNvciAqIHRoaXMuc2NhbGUgPj0gdGhpcy5yZW5kZXJlZC5sZW5ndGggfHwgdGhpcy5wbGFjZWhvbGRlcikgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcigxKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgaXNDdXJzb3JBdFN0YXJ0KCkge1xuICAgIHJldHVybiB0aGlzLmN1cnNvciA9PT0gMCB8fCB0aGlzLnBsYWNlaG9sZGVyICYmIHRoaXMuY3Vyc29yID09PSAxO1xuICB9XG5cbiAgaXNDdXJzb3JBdEVuZCgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJzb3IgPT09IHRoaXMucmVuZGVyZWQubGVuZ3RoIHx8IHRoaXMucGxhY2Vob2xkZXIgJiYgdGhpcy5jdXJzb3IgPT09IHRoaXMucmVuZGVyZWQubGVuZ3RoICsgMTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcblxuICAgIGlmICghdGhpcy5maXJzdFJlbmRlcikge1xuICAgICAgaWYgKHRoaXMub3V0cHV0RXJyb3IpIHRoaXMub3V0LndyaXRlKGN1cnNvci5kb3duKGxpbmVzKHRoaXMub3V0cHV0RXJyb3IsIHRoaXMub3V0LmNvbHVtbnMpIC0gMSkgKyBjbGVhcih0aGlzLm91dHB1dEVycm9yLCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgICB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICB9XG5cbiAgICBzdXBlci5yZW5kZXIoKTtcbiAgICB0aGlzLm91dHB1dEVycm9yID0gJyc7XG4gICAgdGhpcy5vdXRwdXRUZXh0ID0gW3N0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksIGNvbG9yLmJvbGQodGhpcy5tc2cpLCBzdHlsZS5kZWxpbWl0ZXIodGhpcy5kb25lKSwgdGhpcy5yZWQgPyBjb2xvci5yZWQodGhpcy5yZW5kZXJlZCkgOiB0aGlzLnJlbmRlcmVkXS5qb2luKGAgYCk7XG5cbiAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgdGhpcy5vdXRwdXRFcnJvciArPSB0aGlzLmVycm9yTXNnLnNwbGl0KGBcXG5gKS5yZWR1Y2UoKGEsIGwsIGkpID0+IGEgKyBgXFxuJHtpID8gJyAnIDogZmlndXJlcy5wb2ludGVyU21hbGx9ICR7Y29sb3IucmVkKCkuaXRhbGljKGwpfWAsIGBgKTtcbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZShlcmFzZS5saW5lICsgY3Vyc29yLnRvKDApICsgdGhpcy5vdXRwdXRUZXh0ICsgY3Vyc29yLnNhdmUgKyB0aGlzLm91dHB1dEVycm9yICsgY3Vyc29yLnJlc3RvcmUgKyBjdXJzb3IubW92ZSh0aGlzLmN1cnNvck9mZnNldCwgMCkpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0UHJvbXB0OyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuXG5jb25zdCBQcm9tcHQgPSByZXF1aXJlKCcuL3Byb21wdCcpO1xuXG5jb25zdCBfcmVxdWlyZSA9IHJlcXVpcmUoJy4uL3V0aWwnKSxcbiAgICAgIHN0eWxlID0gX3JlcXVpcmUuc3R5bGUsXG4gICAgICBjbGVhciA9IF9yZXF1aXJlLmNsZWFyLFxuICAgICAgZmlndXJlcyA9IF9yZXF1aXJlLmZpZ3VyZXMsXG4gICAgICB3cmFwID0gX3JlcXVpcmUud3JhcCxcbiAgICAgIGVudHJpZXNUb0Rpc3BsYXkgPSBfcmVxdWlyZS5lbnRyaWVzVG9EaXNwbGF5O1xuXG5jb25zdCBfcmVxdWlyZTIgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBjdXJzb3IgPSBfcmVxdWlyZTIuY3Vyc29yO1xuLyoqXG4gKiBTZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmluaXRpYWxdIEluZGV4IG9mIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm9wdGlvbnNQZXJQYWdlPTEwXSBNYXggb3B0aW9ucyB0byBkaXNwbGF5IGF0IG9uY2VcbiAqL1xuXG5cbmNsYXNzIFNlbGVjdFByb21wdCBleHRlbmRzIFByb21wdCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMubXNnID0gb3B0cy5tZXNzYWdlO1xuICAgIHRoaXMuaGludCA9IG9wdHMuaGludCB8fCAnLSBVc2UgYXJyb3cta2V5cy4gUmV0dXJuIHRvIHN1Ym1pdC4nO1xuICAgIHRoaXMud2FybiA9IG9wdHMud2FybiB8fCAnLSBUaGlzIG9wdGlvbiBpcyBkaXNhYmxlZCc7XG4gICAgdGhpcy5jdXJzb3IgPSBvcHRzLmluaXRpYWwgfHwgMDtcbiAgICB0aGlzLmNob2ljZXMgPSBvcHRzLmNob2ljZXMubWFwKChjaCwgaWR4KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNoID09PSAnc3RyaW5nJykgY2ggPSB7XG4gICAgICAgIHRpdGxlOiBjaCxcbiAgICAgICAgdmFsdWU6IGlkeFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBjaCAmJiAoY2gudGl0bGUgfHwgY2gudmFsdWUgfHwgY2gpLFxuICAgICAgICB2YWx1ZTogY2ggJiYgKGNoLnZhbHVlID09PSB1bmRlZmluZWQgPyBpZHggOiBjaC52YWx1ZSksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBjaCAmJiBjaC5kZXNjcmlwdGlvbixcbiAgICAgICAgc2VsZWN0ZWQ6IGNoICYmIGNoLnNlbGVjdGVkLFxuICAgICAgICBkaXNhYmxlZDogY2ggJiYgY2guZGlzYWJsZWRcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5vcHRpb25zUGVyUGFnZSA9IG9wdHMub3B0aW9uc1BlclBhZ2UgfHwgMTA7XG4gICAgdGhpcy52YWx1ZSA9ICh0aGlzLmNob2ljZXNbdGhpcy5jdXJzb3JdIHx8IHt9KS52YWx1ZTtcbiAgICB0aGlzLmNsZWFyID0gY2xlYXIoJycsIHRoaXMub3V0LmNvbHVtbnMpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBtb3ZlQ3Vyc29yKG4pIHtcbiAgICB0aGlzLmN1cnNvciA9IG47XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuY2hvaWNlc1tuXS52YWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMubW92ZUN1cnNvcigwKTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfSBlbHNlIHRoaXMuYmVsbCgpO1xuICB9XG5cbiAgZmlyc3QoKSB7XG4gICAgdGhpcy5tb3ZlQ3Vyc29yKDApO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsYXN0KCkge1xuICAgIHRoaXMubW92ZUN1cnNvcih0aGlzLmNob2ljZXMubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gMCkge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY2hvaWNlcy5sZW5ndGggLSAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY3Vyc29yIC0gMSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSB0aGlzLmNob2ljZXMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5jdXJzb3IgKyAxKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICB0aGlzLm1vdmVDdXJzb3IoKHRoaXMuY3Vyc29yICsgMSkgJSB0aGlzLmNob2ljZXMubGVuZ3RoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYyA9PT0gJyAnKSByZXR1cm4gdGhpcy5zdWJtaXQoKTtcbiAgfVxuXG4gIGdldCBzZWxlY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hvaWNlc1t0aGlzLmN1cnNvcl07XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtlbHNlIHRoaXMub3V0LndyaXRlKGNsZWFyKHRoaXMub3V0cHV0VGV4dCwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgIHN1cGVyLnJlbmRlcigpO1xuXG4gICAgbGV0IF9lbnRyaWVzVG9EaXNwbGF5ID0gZW50cmllc1RvRGlzcGxheSh0aGlzLmN1cnNvciwgdGhpcy5jaG9pY2VzLmxlbmd0aCwgdGhpcy5vcHRpb25zUGVyUGFnZSksXG4gICAgICAgIHN0YXJ0SW5kZXggPSBfZW50cmllc1RvRGlzcGxheS5zdGFydEluZGV4LFxuICAgICAgICBlbmRJbmRleCA9IF9lbnRyaWVzVG9EaXNwbGF5LmVuZEluZGV4OyAvLyBQcmludCBwcm9tcHRcblxuXG4gICAgdGhpcy5vdXRwdXRUZXh0ID0gW3N0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksIGNvbG9yLmJvbGQodGhpcy5tc2cpLCBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLCB0aGlzLmRvbmUgPyB0aGlzLnNlbGVjdGlvbi50aXRsZSA6IHRoaXMuc2VsZWN0aW9uLmRpc2FibGVkID8gY29sb3IueWVsbG93KHRoaXMud2FybikgOiBjb2xvci5ncmF5KHRoaXMuaGludCldLmpvaW4oJyAnKTsgLy8gUHJpbnQgY2hvaWNlc1xuXG4gICAgaWYgKCF0aGlzLmRvbmUpIHtcbiAgICAgIHRoaXMub3V0cHV0VGV4dCArPSAnXFxuJztcblxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmRJbmRleDsgaSsrKSB7XG4gICAgICAgIGxldCB0aXRsZSxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIGRlc2MgPSAnJyxcbiAgICAgICAgICAgIHYgPSB0aGlzLmNob2ljZXNbaV07IC8vIERldGVybWluZSB3aGV0aGVyIHRvIGRpc3BsYXkgXCJtb3JlIGNob2ljZXNcIiBpbmRpY2F0b3JzXG5cbiAgICAgICAgaWYgKGkgPT09IHN0YXJ0SW5kZXggJiYgc3RhcnRJbmRleCA+IDApIHtcbiAgICAgICAgICBwcmVmaXggPSBmaWd1cmVzLmFycm93VXA7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgdGhpcy5jaG9pY2VzLmxlbmd0aCkge1xuICAgICAgICAgIHByZWZpeCA9IGZpZ3VyZXMuYXJyb3dEb3duO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZWZpeCA9ICcgJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2LmRpc2FibGVkKSB7XG4gICAgICAgICAgdGl0bGUgPSB0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmdyYXkoKS51bmRlcmxpbmUodi50aXRsZSkgOiBjb2xvci5zdHJpa2V0aHJvdWdoKCkuZ3JheSh2LnRpdGxlKTtcbiAgICAgICAgICBwcmVmaXggPSAodGhpcy5jdXJzb3IgPT09IGkgPyBjb2xvci5ib2xkKCkuZ3JheShmaWd1cmVzLnBvaW50ZXIpICsgJyAnIDogJyAgJykgKyBwcmVmaXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGl0bGUgPSB0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodi50aXRsZSkgOiB2LnRpdGxlO1xuICAgICAgICAgIHByZWZpeCA9ICh0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmN5YW4oZmlndXJlcy5wb2ludGVyKSArICcgJyA6ICcgICcpICsgcHJlZml4O1xuXG4gICAgICAgICAgaWYgKHYuZGVzY3JpcHRpb24gJiYgdGhpcy5jdXJzb3IgPT09IGkpIHtcbiAgICAgICAgICAgIGRlc2MgPSBgIC0gJHt2LmRlc2NyaXB0aW9ufWA7XG5cbiAgICAgICAgICAgIGlmIChwcmVmaXgubGVuZ3RoICsgdGl0bGUubGVuZ3RoICsgZGVzYy5sZW5ndGggPj0gdGhpcy5vdXQuY29sdW1ucyB8fCB2LmRlc2NyaXB0aW9uLnNwbGl0KC9cXHI/XFxuLykubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICBkZXNjID0gJ1xcbicgKyB3cmFwKHYuZGVzY3JpcHRpb24sIHtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDMsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMub3V0LmNvbHVtbnNcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9IGAke3ByZWZpeH0gJHt0aXRsZX0ke2NvbG9yLmdyYXkoZGVzYyl9XFxuYDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZSh0aGlzLm91dHB1dFRleHQpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTZWxlY3RQcm9tcHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcblxuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCcuLi91dGlsJyksXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlLnN0eWxlLFxuICAgICAgY2xlYXIgPSBfcmVxdWlyZS5jbGVhcjtcblxuY29uc3QgX3JlcXVpcmUyID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUyLmN1cnNvcixcbiAgICAgIGVyYXNlID0gX3JlcXVpcmUyLmVyYXNlO1xuLyoqXG4gKiBUb2dnbGVQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuaW5pdGlhbD1mYWxzZV0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmFjdGl2ZT0nbm8nXSBBY3RpdmUgbGFiZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbmFjdGl2ZT0nb2ZmJ10gSW5hY3RpdmUgbGFiZWxcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5cblxuY2xhc3MgVG9nZ2xlUHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy52YWx1ZSA9ICEhb3B0cy5pbml0aWFsO1xuICAgIHRoaXMuYWN0aXZlID0gb3B0cy5hY3RpdmUgfHwgJ29uJztcbiAgICB0aGlzLmluYWN0aXZlID0gb3B0cy5pbmFjdGl2ZSB8fCAnb2ZmJztcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLmluaXRpYWxWYWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgaWYgKHRoaXMudmFsdWUgPT09IGZhbHNlKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBhY3RpdmF0ZSgpIHtcbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gdHJ1ZSkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIHRoaXMuZGVhY3RpdmF0ZSgpO1xuICB9XG5cbiAgcmlnaHQoKSB7XG4gICAgdGhpcy5hY3RpdmF0ZSgpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuYWN0aXZhdGUoKTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgdGhpcy52YWx1ZSA9ICF0aGlzLnZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBfKGMsIGtleSkge1xuICAgIGlmIChjID09PSAnICcpIHtcbiAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZTtcbiAgICB9IGVsc2UgaWYgKGMgPT09ICcxJykge1xuICAgICAgdGhpcy52YWx1ZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChjID09PSAnMCcpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBmYWxzZTtcbiAgICB9IGVsc2UgcmV0dXJuIHRoaXMuYmVsbCgpO1xuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5maXJzdFJlbmRlcikgdGhpcy5vdXQud3JpdGUoY3Vyc29yLmhpZGUpO2Vsc2UgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG4gICAgdGhpcy5vdXRwdXRUZXh0ID0gW3N0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksIGNvbG9yLmJvbGQodGhpcy5tc2cpLCBzdHlsZS5kZWxpbWl0ZXIodGhpcy5kb25lKSwgdGhpcy52YWx1ZSA/IHRoaXMuaW5hY3RpdmUgOiBjb2xvci5jeWFuKCkudW5kZXJsaW5lKHRoaXMuaW5hY3RpdmUpLCBjb2xvci5ncmF5KCcvJyksIHRoaXMudmFsdWUgPyBjb2xvci5jeWFuKCkudW5kZXJsaW5lKHRoaXMuYWN0aXZlKSA6IHRoaXMuYWN0aXZlXS5qb2luKCcgJyk7XG4gICAgdGhpcy5vdXQud3JpdGUoZXJhc2UubGluZSArIGN1cnNvci50bygwKSArIHRoaXMub3V0cHV0VGV4dCk7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvZ2dsZVByb21wdDsiLCIndXNlIHN0cmljdCc7XG5cbmNsYXNzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIHRva2VuLFxuICAgIGRhdGUsXG4gICAgcGFydHMsXG4gICAgbG9jYWxlc1xuICB9KSB7XG4gICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIHRoaXMuZGF0ZSA9IGRhdGUgfHwgbmV3IERhdGUoKTtcbiAgICB0aGlzLnBhcnRzID0gcGFydHMgfHwgW3RoaXNdO1xuICAgIHRoaXMubG9jYWxlcyA9IGxvY2FsZXMgfHwge307XG4gIH1cblxuICB1cCgpIHt9XG5cbiAgZG93bigpIHt9XG5cbiAgbmV4dCgpIHtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gdGhpcy5wYXJ0cy5pbmRleE9mKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnBhcnRzLmZpbmQoKHBhcnQsIGlkeCkgPT4gaWR4ID4gY3VycmVudElkeCAmJiBwYXJ0IGluc3RhbmNlb2YgRGF0ZVBhcnQpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7fVxuXG4gIHByZXYoKSB7XG4gICAgbGV0IHBhcnRzID0gW10uY29uY2F0KHRoaXMucGFydHMpLnJldmVyc2UoKTtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gcGFydHMuaW5kZXhPZih0aGlzKTtcbiAgICByZXR1cm4gcGFydHMuZmluZCgocGFydCwgaWR4KSA9PiBpZHggPiBjdXJyZW50SWR4ICYmIHBhcnQgaW5zdGFuY2VvZiBEYXRlUGFydCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuZGF0ZSk7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGVQYXJ0OyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgRGF0ZVBhcnQgPSByZXF1aXJlKCcuL2RhdGVwYXJ0Jyk7XG5cbmNsYXNzIE1lcmlkaWVtIGV4dGVuZHMgRGF0ZVBhcnQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRIb3VycygodGhpcy5kYXRlLmdldEhvdXJzKCkgKyAxMikgJSAyNCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMudXAoKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBtZXJpZGllbSA9IHRoaXMuZGF0ZS5nZXRIb3VycygpID4gMTIgPyAncG0nIDogJ2FtJztcbiAgICByZXR1cm4gL1xcQS8udGVzdCh0aGlzLnRva2VuKSA/IG1lcmlkaWVtLnRvVXBwZXJDYXNlKCkgOiBtZXJpZGllbTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWVyaWRpZW07IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY29uc3QgcG9zID0gbiA9PiB7XG4gIG4gPSBuICUgMTA7XG4gIHJldHVybiBuID09PSAxID8gJ3N0JyA6IG4gPT09IDIgPyAnbmQnIDogbiA9PT0gMyA/ICdyZCcgOiAndGgnO1xufTtcblxuY2xhc3MgRGF5IGV4dGVuZHMgRGF0ZVBhcnQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXREYXRlKHRoaXMuZGF0ZS5nZXREYXRlKCkgKyAxKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgdGhpcy5kYXRlLnNldERhdGUodGhpcy5kYXRlLmdldERhdGUoKSAtIDEpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7XG4gICAgdGhpcy5kYXRlLnNldERhdGUocGFyc2VJbnQodmFsLnN1YnN0cigtMikpKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBkYXRlID0gdGhpcy5kYXRlLmdldERhdGUoKTtcbiAgICBsZXQgZGF5ID0gdGhpcy5kYXRlLmdldERheSgpO1xuICAgIHJldHVybiB0aGlzLnRva2VuID09PSAnREQnID8gU3RyaW5nKGRhdGUpLnBhZFN0YXJ0KDIsICcwJykgOiB0aGlzLnRva2VuID09PSAnRG8nID8gZGF0ZSArIHBvcyhkYXRlKSA6IHRoaXMudG9rZW4gPT09ICdkJyA/IGRheSArIDEgOiB0aGlzLnRva2VuID09PSAnZGRkJyA/IHRoaXMubG9jYWxlcy53ZWVrZGF5c1Nob3J0W2RheV0gOiB0aGlzLnRva2VuID09PSAnZGRkZCcgPyB0aGlzLmxvY2FsZXMud2Vla2RheXNbZGF5XSA6IGRhdGU7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERheTsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jbGFzcyBIb3VycyBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gIH1cblxuICB1cCgpIHtcbiAgICB0aGlzLmRhdGUuc2V0SG91cnModGhpcy5kYXRlLmdldEhvdXJzKCkgKyAxKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgdGhpcy5kYXRlLnNldEhvdXJzKHRoaXMuZGF0ZS5nZXRIb3VycygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0SG91cnMocGFyc2VJbnQodmFsLnN1YnN0cigtMikpKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBob3VycyA9IHRoaXMuZGF0ZS5nZXRIb3VycygpO1xuICAgIGlmICgvaC8udGVzdCh0aGlzLnRva2VuKSkgaG91cnMgPSBob3VycyAlIDEyIHx8IDEyO1xuICAgIHJldHVybiB0aGlzLnRva2VuLmxlbmd0aCA+IDEgPyBTdHJpbmcoaG91cnMpLnBhZFN0YXJ0KDIsICcwJykgOiBob3VycztcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gSG91cnM7IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgTWlsbGlzZWNvbmRzIGV4dGVuZHMgRGF0ZVBhcnQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlLmdldE1pbGxpc2Vjb25kcygpICsgMSk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlLmdldE1pbGxpc2Vjb25kcygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWlsbGlzZWNvbmRzKHBhcnNlSW50KHZhbC5zdWJzdHIoLXRoaXMudG9rZW4ubGVuZ3RoKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIFN0cmluZyh0aGlzLmRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpLnBhZFN0YXJ0KDQsICcwJykuc3Vic3RyKDAsIHRoaXMudG9rZW4ubGVuZ3RoKTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWlsbGlzZWNvbmRzOyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgRGF0ZVBhcnQgPSByZXF1aXJlKCcuL2RhdGVwYXJ0Jyk7XG5cbmNsYXNzIE1pbnV0ZXMgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldE1pbnV0ZXModGhpcy5kYXRlLmdldE1pbnV0ZXMoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWludXRlcyh0aGlzLmRhdGUuZ2V0TWludXRlcygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWludXRlcyhwYXJzZUludCh2YWwuc3Vic3RyKC0yKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IG0gPSB0aGlzLmRhdGUuZ2V0TWludXRlcygpO1xuICAgIHJldHVybiB0aGlzLnRva2VuLmxlbmd0aCA+IDEgPyBTdHJpbmcobSkucGFkU3RhcnQoMiwgJzAnKSA6IG07XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1pbnV0ZXM7IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgTW9udGggZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldE1vbnRoKHRoaXMuZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNb250aCh0aGlzLmRhdGUuZ2V0TW9udGgoKSAtIDEpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7XG4gICAgdmFsID0gcGFyc2VJbnQodmFsLnN1YnN0cigtMikpIC0gMTtcbiAgICB0aGlzLmRhdGUuc2V0TW9udGgodmFsIDwgMCA/IDAgOiB2YWwpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IG1vbnRoID0gdGhpcy5kYXRlLmdldE1vbnRoKCk7XG4gICAgbGV0IHRsID0gdGhpcy50b2tlbi5sZW5ndGg7XG4gICAgcmV0dXJuIHRsID09PSAyID8gU3RyaW5nKG1vbnRoICsgMSkucGFkU3RhcnQoMiwgJzAnKSA6IHRsID09PSAzID8gdGhpcy5sb2NhbGVzLm1vbnRoc1Nob3J0W21vbnRoXSA6IHRsID09PSA0ID8gdGhpcy5sb2NhbGVzLm1vbnRoc1ttb250aF0gOiBTdHJpbmcobW9udGggKyAxKTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9udGg7IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgU2Vjb25kcyBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gIH1cblxuICB1cCgpIHtcbiAgICB0aGlzLmRhdGUuc2V0U2Vjb25kcyh0aGlzLmRhdGUuZ2V0U2Vjb25kcygpICsgMSk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRTZWNvbmRzKHRoaXMuZGF0ZS5nZXRTZWNvbmRzKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHRoaXMuZGF0ZS5zZXRTZWNvbmRzKHBhcnNlSW50KHZhbC5zdWJzdHIoLTIpKSk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICBsZXQgcyA9IHRoaXMuZGF0ZS5nZXRTZWNvbmRzKCk7XG4gICAgcmV0dXJuIHRoaXMudG9rZW4ubGVuZ3RoID4gMSA/IFN0cmluZyhzKS5wYWRTdGFydCgyLCAnMCcpIDogcztcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2Vjb25kczsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jbGFzcyBZZWFyIGV4dGVuZHMgRGF0ZVBhcnQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRGdWxsWWVhcih0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0RnVsbFllYXIodGhpcy5kYXRlLmdldEZ1bGxZZWFyKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHRoaXMuZGF0ZS5zZXRGdWxsWWVhcih2YWwuc3Vic3RyKC00KSk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICBsZXQgeWVhciA9IFN0cmluZyh0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSkucGFkU3RhcnQoNCwgJzAnKTtcbiAgICByZXR1cm4gdGhpcy50b2tlbi5sZW5ndGggPT09IDIgPyB5ZWFyLnN1YnN0cigtMikgOiB5ZWFyO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBZZWFyOyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIERhdGVQYXJ0OiByZXF1aXJlKCcuL2RhdGVwYXJ0JyksXG4gIE1lcmlkaWVtOiByZXF1aXJlKCcuL21lcmlkaWVtJyksXG4gIERheTogcmVxdWlyZSgnLi9kYXknKSxcbiAgSG91cnM6IHJlcXVpcmUoJy4vaG91cnMnKSxcbiAgTWlsbGlzZWNvbmRzOiByZXF1aXJlKCcuL21pbGxpc2Vjb25kcycpLFxuICBNaW51dGVzOiByZXF1aXJlKCcuL21pbnV0ZXMnKSxcbiAgTW9udGg6IHJlcXVpcmUoJy4vbW9udGgnKSxcbiAgU2Vjb25kczogcmVxdWlyZSgnLi9zZWNvbmRzJyksXG4gIFllYXI6IHJlcXVpcmUoJy4veWVhcicpXG59OyIsIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykgeyB0cnkgeyB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7IHZhciB2YWx1ZSA9IGluZm8udmFsdWU7IH0gY2F0Y2ggKGVycm9yKSB7IHJlamVjdChlcnJvcik7IHJldHVybjsgfSBpZiAoaW5mby5kb25lKSB7IHJlc29sdmUodmFsdWUpOyB9IGVsc2UgeyBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7IH0gfVxuXG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyB2YXIgc2VsZiA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTsgZnVuY3Rpb24gX25leHQodmFsdWUpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpOyB9IGZ1bmN0aW9uIF90aHJvdyhlcnIpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7IH0gX25leHQodW5kZWZpbmVkKTsgfSk7IH07IH1cblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuXG5jb25zdCBQcm9tcHQgPSByZXF1aXJlKCcuL3Byb21wdCcpO1xuXG5jb25zdCBfcmVxdWlyZSA9IHJlcXVpcmUoJy4uL3V0aWwnKSxcbiAgICAgIHN0eWxlID0gX3JlcXVpcmUuc3R5bGUsXG4gICAgICBjbGVhciA9IF9yZXF1aXJlLmNsZWFyLFxuICAgICAgZmlndXJlcyA9IF9yZXF1aXJlLmZpZ3VyZXM7XG5cbmNvbnN0IF9yZXF1aXJlMiA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKSxcbiAgICAgIGVyYXNlID0gX3JlcXVpcmUyLmVyYXNlLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUyLmN1cnNvcjtcblxuY29uc3QgX3JlcXVpcmUzID0gcmVxdWlyZSgnLi4vZGF0ZXBhcnRzJyksXG4gICAgICBEYXRlUGFydCA9IF9yZXF1aXJlMy5EYXRlUGFydCxcbiAgICAgIE1lcmlkaWVtID0gX3JlcXVpcmUzLk1lcmlkaWVtLFxuICAgICAgRGF5ID0gX3JlcXVpcmUzLkRheSxcbiAgICAgIEhvdXJzID0gX3JlcXVpcmUzLkhvdXJzLFxuICAgICAgTWlsbGlzZWNvbmRzID0gX3JlcXVpcmUzLk1pbGxpc2Vjb25kcyxcbiAgICAgIE1pbnV0ZXMgPSBfcmVxdWlyZTMuTWludXRlcyxcbiAgICAgIE1vbnRoID0gX3JlcXVpcmUzLk1vbnRoLFxuICAgICAgU2Vjb25kcyA9IF9yZXF1aXJlMy5TZWNvbmRzLFxuICAgICAgWWVhciA9IF9yZXF1aXJlMy5ZZWFyO1xuXG5jb25zdCByZWdleCA9IC9cXFxcKC4pfFwiKCg/OlxcXFxbXCJcXFxcXXxbXlwiXSkrKVwifChEW0RvXT98ZHszLDR9fGQpfChNezEsNH0pfChZWSg/OllZKT8pfChbYUFdKXwoW0hoXXsxLDJ9KXwobXsxLDJ9KXwoc3sxLDJ9KXwoU3sxLDR9KXwuL2c7XG5jb25zdCByZWdleEdyb3VwcyA9IHtcbiAgMTogKHtcbiAgICB0b2tlblxuICB9KSA9PiB0b2tlbi5yZXBsYWNlKC9cXFxcKC4pL2csICckMScpLFxuICAyOiBvcHRzID0+IG5ldyBEYXkob3B0cyksXG4gIC8vIERheSAvLyBUT0RPXG4gIDM6IG9wdHMgPT4gbmV3IE1vbnRoKG9wdHMpLFxuICAvLyBNb250aFxuICA0OiBvcHRzID0+IG5ldyBZZWFyKG9wdHMpLFxuICAvLyBZZWFyXG4gIDU6IG9wdHMgPT4gbmV3IE1lcmlkaWVtKG9wdHMpLFxuICAvLyBBTS9QTSAvLyBUT0RPIChzcGVjaWFsKVxuICA2OiBvcHRzID0+IG5ldyBIb3VycyhvcHRzKSxcbiAgLy8gSG91cnNcbiAgNzogb3B0cyA9PiBuZXcgTWludXRlcyhvcHRzKSxcbiAgLy8gTWludXRlc1xuICA4OiBvcHRzID0+IG5ldyBTZWNvbmRzKG9wdHMpLFxuICAvLyBTZWNvbmRzXG4gIDk6IG9wdHMgPT4gbmV3IE1pbGxpc2Vjb25kcyhvcHRzKSAvLyBGcmFjdGlvbmFsIHNlY29uZHNcblxufTtcbmNvbnN0IGRmbHRMb2NhbGVzID0ge1xuICBtb250aHM6ICdKYW51YXJ5LEZlYnJ1YXJ5LE1hcmNoLEFwcmlsLE1heSxKdW5lLEp1bHksQXVndXN0LFNlcHRlbWJlcixPY3RvYmVyLE5vdmVtYmVyLERlY2VtYmVyJy5zcGxpdCgnLCcpLFxuICBtb250aHNTaG9ydDogJ0phbixGZWIsTWFyLEFwcixNYXksSnVuLEp1bCxBdWcsU2VwLE9jdCxOb3YsRGVjJy5zcGxpdCgnLCcpLFxuICB3ZWVrZGF5czogJ1N1bmRheSxNb25kYXksVHVlc2RheSxXZWRuZXNkYXksVGh1cnNkYXksRnJpZGF5LFNhdHVyZGF5Jy5zcGxpdCgnLCcpLFxuICB3ZWVrZGF5c1Nob3J0OiAnU3VuLE1vbixUdWUsV2VkLFRodSxGcmksU2F0Jy5zcGxpdCgnLCcpXG59O1xuLyoqXG4gKiBEYXRlUHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5pdGlhbF0gSW5kZXggb2YgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm1hc2tdIFRoZSBmb3JtYXQgbWFza1xuICogQHBhcmFtIHtvYmplY3R9IFtvcHRzLmxvY2FsZXNdIFRoZSBkYXRlIGxvY2FsZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5lcnJvcl0gVGhlIGVycm9yIG1lc3NhZ2Ugc2hvd24gb24gaW52YWxpZCB2YWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBzdWJtaXR0ZWQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5cbmNsYXNzIERhdGVQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmN1cnNvciA9IDA7XG4gICAgdGhpcy50eXBlZCA9ICcnO1xuICAgIHRoaXMubG9jYWxlcyA9IE9iamVjdC5hc3NpZ24oZGZsdExvY2FsZXMsIG9wdHMubG9jYWxlcyk7XG4gICAgdGhpcy5fZGF0ZSA9IG9wdHMuaW5pdGlhbCB8fCBuZXcgRGF0ZSgpO1xuICAgIHRoaXMuZXJyb3JNc2cgPSBvcHRzLmVycm9yIHx8ICdQbGVhc2UgRW50ZXIgQSBWYWxpZCBWYWx1ZSc7XG5cbiAgICB0aGlzLnZhbGlkYXRvciA9IG9wdHMudmFsaWRhdGUgfHwgKCgpID0+IHRydWUpO1xuXG4gICAgdGhpcy5tYXNrID0gb3B0cy5tYXNrIHx8ICdZWVlZLU1NLUREIEhIOm1tOnNzJztcbiAgICB0aGlzLmNsZWFyID0gY2xlYXIoJycsIHRoaXMub3V0LmNvbHVtbnMpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZTtcbiAgfVxuXG4gIGdldCBkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRlO1xuICB9XG5cbiAgc2V0IGRhdGUoZGF0ZSkge1xuICAgIGlmIChkYXRlKSB0aGlzLl9kYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkpO1xuICB9XG5cbiAgc2V0IG1hc2sobWFzaykge1xuICAgIGxldCByZXN1bHQ7XG4gICAgdGhpcy5wYXJ0cyA9IFtdO1xuXG4gICAgd2hpbGUgKHJlc3VsdCA9IHJlZ2V4LmV4ZWMobWFzaykpIHtcbiAgICAgIGxldCBtYXRjaCA9IHJlc3VsdC5zaGlmdCgpO1xuICAgICAgbGV0IGlkeCA9IHJlc3VsdC5maW5kSW5kZXgoZ3IgPT4gZ3IgIT0gbnVsbCk7XG4gICAgICB0aGlzLnBhcnRzLnB1c2goaWR4IGluIHJlZ2V4R3JvdXBzID8gcmVnZXhHcm91cHNbaWR4XSh7XG4gICAgICAgIHRva2VuOiByZXN1bHRbaWR4XSB8fCBtYXRjaCxcbiAgICAgICAgZGF0ZTogdGhpcy5kYXRlLFxuICAgICAgICBwYXJ0czogdGhpcy5wYXJ0cyxcbiAgICAgICAgbG9jYWxlczogdGhpcy5sb2NhbGVzXG4gICAgICB9KSA6IHJlc3VsdFtpZHhdIHx8IG1hdGNoKTtcbiAgICB9XG5cbiAgICBsZXQgcGFydHMgPSB0aGlzLnBhcnRzLnJlZHVjZSgoYXJyLCBpKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGkgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBhcnJbYXJyLmxlbmd0aCAtIDFdID09PSAnc3RyaW5nJykgYXJyW2Fyci5sZW5ndGggLSAxXSArPSBpO2Vsc2UgYXJyLnB1c2goaSk7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH0sIFtdKTtcbiAgICB0aGlzLnBhcnRzLnNwbGljZSgwKTtcbiAgICB0aGlzLnBhcnRzLnB1c2goLi4ucGFydHMpO1xuICAgIHRoaXMucmVzZXQoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIHRoaXMudHlwZWQgPSAnJztcbiAgICB0aGlzLmN1cnNvciA9IG47XG4gICAgdGhpcy5maXJlKCk7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5wYXJ0cy5maW5kSW5kZXgocCA9PiBwIGluc3RhbmNlb2YgRGF0ZVBhcnQpKTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICB2YWxpZGF0ZSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBsZXQgdmFsaWQgPSB5aWVsZCBfdGhpcy52YWxpZGF0b3IoX3RoaXMudmFsdWUpO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbGlkID09PSAnc3RyaW5nJykge1xuICAgICAgICBfdGhpcy5lcnJvck1zZyA9IHZhbGlkO1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5lcnJvciA9ICF2YWxpZDtcbiAgICB9KSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICB5aWVsZCBfdGhpczIudmFsaWRhdGUoKTtcblxuICAgICAgaWYgKF90aGlzMi5lcnJvcikge1xuICAgICAgICBfdGhpczIuY29sb3IgPSAncmVkJztcblxuICAgICAgICBfdGhpczIuZmlyZSgpO1xuXG4gICAgICAgIF90aGlzMi5yZW5kZXIoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzMi5kb25lID0gdHJ1ZTtcbiAgICAgIF90aGlzMi5hYm9ydGVkID0gZmFsc2U7XG5cbiAgICAgIF90aGlzMi5maXJlKCk7XG5cbiAgICAgIF90aGlzMi5yZW5kZXIoKTtcblxuICAgICAgX3RoaXMyLm91dC53cml0ZSgnXFxuJyk7XG5cbiAgICAgIF90aGlzMi5jbG9zZSgpO1xuICAgIH0pKCk7XG4gIH1cblxuICB1cCgpIHtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0udXAoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0uZG93bigpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIGxldCBwcmV2ID0gdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0ucHJldigpO1xuICAgIGlmIChwcmV2ID09IG51bGwpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5wYXJ0cy5pbmRleE9mKHByZXYpKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmlnaHQoKSB7XG4gICAgbGV0IG5leHQgPSB0aGlzLnBhcnRzW3RoaXMuY3Vyc29yXS5uZXh0KCk7XG4gICAgaWYgKG5leHQgPT0gbnVsbCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcih0aGlzLnBhcnRzLmluZGV4T2YobmV4dCkpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIGxldCBuZXh0ID0gdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0ubmV4dCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcihuZXh0ID8gdGhpcy5wYXJ0cy5pbmRleE9mKG5leHQpIDogdGhpcy5wYXJ0cy5maW5kSW5kZXgocGFydCA9PiBwYXJ0IGluc3RhbmNlb2YgRGF0ZVBhcnQpKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjKSB7XG4gICAgaWYgKC9cXGQvLnRlc3QoYykpIHtcbiAgICAgIHRoaXMudHlwZWQgKz0gYztcbiAgICAgIHRoaXMucGFydHNbdGhpcy5jdXJzb3JdLnNldFRvKHRoaXMudHlwZWQpO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtlbHNlIHRoaXMub3V0LndyaXRlKGNsZWFyKHRoaXMub3V0cHV0VGV4dCwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgIHN1cGVyLnJlbmRlcigpOyAvLyBQcmludCBwcm9tcHRcblxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLCBjb2xvci5ib2xkKHRoaXMubXNnKSwgc3R5bGUuZGVsaW1pdGVyKGZhbHNlKSwgdGhpcy5wYXJ0cy5yZWR1Y2UoKGFyciwgcCwgaWR4KSA9PiBhcnIuY29uY2F0KGlkeCA9PT0gdGhpcy5jdXJzb3IgJiYgIXRoaXMuZG9uZSA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUocC50b1N0cmluZygpKSA6IHApLCBbXSkuam9pbignJyldLmpvaW4oJyAnKTsgLy8gUHJpbnQgZXJyb3JcblxuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aGlzLm91dHB1dFRleHQgKz0gdGhpcy5lcnJvck1zZy5zcGxpdCgnXFxuJykucmVkdWNlKChhLCBsLCBpKSA9PiBhICsgYFxcbiR7aSA/IGAgYCA6IGZpZ3VyZXMucG9pbnRlclNtYWxsfSAke2NvbG9yLnJlZCgpLml0YWxpYyhsKX1gLCBgYCk7XG4gICAgfVxuXG4gICAgdGhpcy5vdXQud3JpdGUoZXJhc2UubGluZSArIGN1cnNvci50bygwKSArIHRoaXMub3V0cHV0VGV4dCk7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGVQcm9tcHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbmNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcblxuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBjdXJzb3IgPSBfcmVxdWlyZS5jdXJzb3IsXG4gICAgICBlcmFzZSA9IF9yZXF1aXJlLmVyYXNlO1xuXG5jb25zdCBfcmVxdWlyZTIgPSByZXF1aXJlKCcuLi91dGlsJyksXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlMi5zdHlsZSxcbiAgICAgIGZpZ3VyZXMgPSBfcmVxdWlyZTIuZmlndXJlcyxcbiAgICAgIGNsZWFyID0gX3JlcXVpcmUyLmNsZWFyLFxuICAgICAgbGluZXMgPSBfcmVxdWlyZTIubGluZXM7XG5cbmNvbnN0IGlzTnVtYmVyID0gL1swLTldLztcblxuY29uc3QgaXNEZWYgPSBhbnkgPT4gYW55ICE9PSB1bmRlZmluZWQ7XG5cbmNvbnN0IHJvdW5kID0gKG51bWJlciwgcHJlY2lzaW9uKSA9PiB7XG4gIGxldCBmYWN0b3IgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uKTtcbiAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyICogZmFjdG9yKSAvIGZhY3Rvcjtcbn07XG4vKipcbiAqIE51bWJlclByb21wdCBCYXNlIEVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLm1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnN0eWxlPSdkZWZhdWx0J10gUmVuZGVyIHN0eWxlXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5pdGlhbF0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm1heD0rSW5maW5pdHldIE1heCB2YWx1ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm1pbj0tSW5maW5pdHldIE1pbiB2YWx1ZVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5mbG9hdD1mYWxzZV0gUGFyc2UgaW5wdXQgYXMgZmxvYXRzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMucm91bmQ9Ml0gUm91bmQgZmxvYXRzIHRvIHggZGVjaW1hbHNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5pbmNyZW1lbnQ9MV0gTnVtYmVyIHRvIGluY3JlbWVudCBieSB3aGVuIHVzaW5nIGFycm93LWtleXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLnZhbGlkYXRlXSBWYWxpZGF0ZSBmdW5jdGlvblxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuZXJyb3JdIFRoZSBpbnZhbGlkIGVycm9yIGxhYmVsXG4gKi9cblxuXG5jbGFzcyBOdW1iZXJQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHN0eWxlLnJlbmRlcihvcHRzLnN0eWxlKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmluaXRpYWwgPSBpc0RlZihvcHRzLmluaXRpYWwpID8gb3B0cy5pbml0aWFsIDogJyc7XG4gICAgdGhpcy5mbG9hdCA9ICEhb3B0cy5mbG9hdDtcbiAgICB0aGlzLnJvdW5kID0gb3B0cy5yb3VuZCB8fCAyO1xuICAgIHRoaXMuaW5jID0gb3B0cy5pbmNyZW1lbnQgfHwgMTtcbiAgICB0aGlzLm1pbiA9IGlzRGVmKG9wdHMubWluKSA/IG9wdHMubWluIDogLUluZmluaXR5O1xuICAgIHRoaXMubWF4ID0gaXNEZWYob3B0cy5tYXgpID8gb3B0cy5tYXggOiBJbmZpbml0eTtcbiAgICB0aGlzLmVycm9yTXNnID0gb3B0cy5lcnJvciB8fCBgUGxlYXNlIEVudGVyIEEgVmFsaWQgVmFsdWVgO1xuXG4gICAgdGhpcy52YWxpZGF0b3IgPSBvcHRzLnZhbGlkYXRlIHx8ICgoKSA9PiB0cnVlKTtcblxuICAgIHRoaXMuY29sb3IgPSBgY3lhbmA7XG4gICAgdGhpcy52YWx1ZSA9IGBgO1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICB0aGlzLmxhc3RIaXQgPSAwO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgdmFsdWUodikge1xuICAgIGlmICghdiAmJiB2ICE9PSAwKSB7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVuZGVyZWQgPSBjb2xvci5ncmF5KHRoaXMudHJhbnNmb3JtLnJlbmRlcihgJHt0aGlzLmluaXRpYWx9YCkpO1xuICAgICAgdGhpcy5fdmFsdWUgPSBgYDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXJlZCA9IHRoaXMudHJhbnNmb3JtLnJlbmRlcihgJHtyb3VuZCh2LCB0aGlzLnJvdW5kKX1gKTtcbiAgICAgIHRoaXMuX3ZhbHVlID0gcm91bmQodiwgdGhpcy5yb3VuZCk7XG4gICAgfVxuXG4gICAgdGhpcy5maXJlKCk7XG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgcGFyc2UoeCkge1xuICAgIHJldHVybiB0aGlzLmZsb2F0ID8gcGFyc2VGbG9hdCh4KSA6IHBhcnNlSW50KHgpO1xuICB9XG5cbiAgdmFsaWQoYykge1xuICAgIHJldHVybiBjID09PSBgLWAgfHwgYyA9PT0gYC5gICYmIHRoaXMuZmxvYXQgfHwgaXNOdW1iZXIudGVzdChjKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGV4aXQoKSB7XG4gICAgdGhpcy5hYm9ydCgpO1xuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgbGV0IHggPSB0aGlzLnZhbHVlO1xuICAgIHRoaXMudmFsdWUgPSB4ICE9PSBgYCA/IHggOiB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZShgXFxuYCk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgdmFsaWRhdGUoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiogKCkge1xuICAgICAgbGV0IHZhbGlkID0geWllbGQgX3RoaXMudmFsaWRhdG9yKF90aGlzLnZhbHVlKTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWxpZCA9PT0gYHN0cmluZ2ApIHtcbiAgICAgICAgX3RoaXMuZXJyb3JNc2cgPSB2YWxpZDtcbiAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuZXJyb3IgPSAhdmFsaWQ7XG4gICAgfSkoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiogKCkge1xuICAgICAgeWllbGQgX3RoaXMyLnZhbGlkYXRlKCk7XG5cbiAgICAgIGlmIChfdGhpczIuZXJyb3IpIHtcbiAgICAgICAgX3RoaXMyLmNvbG9yID0gYHJlZGA7XG5cbiAgICAgICAgX3RoaXMyLmZpcmUoKTtcblxuICAgICAgICBfdGhpczIucmVuZGVyKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgeCA9IF90aGlzMi52YWx1ZTtcbiAgICAgIF90aGlzMi52YWx1ZSA9IHggIT09IGBgID8geCA6IF90aGlzMi5pbml0aWFsO1xuICAgICAgX3RoaXMyLmRvbmUgPSB0cnVlO1xuICAgICAgX3RoaXMyLmFib3J0ZWQgPSBmYWxzZTtcbiAgICAgIF90aGlzMi5lcnJvciA9IGZhbHNlO1xuXG4gICAgICBfdGhpczIuZmlyZSgpO1xuXG4gICAgICBfdGhpczIucmVuZGVyKCk7XG5cbiAgICAgIF90aGlzMi5vdXQud3JpdGUoYFxcbmApO1xuXG4gICAgICBfdGhpczIuY2xvc2UoKTtcbiAgICB9KSgpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy50eXBlZCA9IGBgO1xuXG4gICAgaWYgKHRoaXMudmFsdWUgPT09ICcnKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5taW4gLSB0aGlzLmluYztcbiAgICB9XG5cbiAgICBpZiAodGhpcy52YWx1ZSA+PSB0aGlzLm1heCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgKz0gdGhpcy5pbmM7XG4gICAgdGhpcy5jb2xvciA9IGBjeWFuYDtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLnR5cGVkID0gYGA7XG5cbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gJycpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1pbiArIHRoaXMuaW5jO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZhbHVlIDw9IHRoaXMubWluKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSAtPSB0aGlzLmluYztcbiAgICB0aGlzLmNvbG9yID0gYGN5YW5gO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgbGV0IHZhbCA9IHRoaXMudmFsdWUudG9TdHJpbmcoKTtcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnBhcnNlKHZhbCA9IHZhbC5zbGljZSgwLCAtMSkpIHx8IGBgO1xuXG4gICAgaWYgKHRoaXMudmFsdWUgIT09ICcnICYmIHRoaXMudmFsdWUgPCB0aGlzLm1pbikge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluO1xuICAgIH1cblxuICAgIHRoaXMuY29sb3IgPSBgY3lhbmA7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuaW5pdGlhbDtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoIXRoaXMudmFsaWQoYykpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmIChub3cgLSB0aGlzLmxhc3RIaXQgPiAxMDAwKSB0aGlzLnR5cGVkID0gYGA7IC8vIDFzIGVsYXBzZWRcblxuICAgIHRoaXMudHlwZWQgKz0gYztcbiAgICB0aGlzLmxhc3RIaXQgPSBub3c7XG4gICAgdGhpcy5jb2xvciA9IGBjeWFuYDtcbiAgICBpZiAoYyA9PT0gYC5gKSByZXR1cm4gdGhpcy5maXJlKCk7XG4gICAgdGhpcy52YWx1ZSA9IE1hdGgubWluKHRoaXMucGFyc2UodGhpcy50eXBlZCksIHRoaXMubWF4KTtcbiAgICBpZiAodGhpcy52YWx1ZSA+IHRoaXMubWF4KSB0aGlzLnZhbHVlID0gdGhpcy5tYXg7XG4gICAgaWYgKHRoaXMudmFsdWUgPCB0aGlzLm1pbikgdGhpcy52YWx1ZSA9IHRoaXMubWluO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG5cbiAgICBpZiAoIXRoaXMuZmlyc3RSZW5kZXIpIHtcbiAgICAgIGlmICh0aGlzLm91dHB1dEVycm9yKSB0aGlzLm91dC53cml0ZShjdXJzb3IuZG93bihsaW5lcyh0aGlzLm91dHB1dEVycm9yLCB0aGlzLm91dC5jb2x1bW5zKSAtIDEpICsgY2xlYXIodGhpcy5vdXRwdXRFcnJvciwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgICAgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgfVxuXG4gICAgc3VwZXIucmVuZGVyKCk7XG4gICAgdGhpcy5vdXRwdXRFcnJvciA9ICcnOyAvLyBQcmludCBwcm9tcHRcblxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLCBjb2xvci5ib2xkKHRoaXMubXNnKSwgc3R5bGUuZGVsaW1pdGVyKHRoaXMuZG9uZSksICF0aGlzLmRvbmUgfHwgIXRoaXMuZG9uZSAmJiAhdGhpcy5wbGFjZWhvbGRlciA/IGNvbG9yW3RoaXMuY29sb3JdKCkudW5kZXJsaW5lKHRoaXMucmVuZGVyZWQpIDogdGhpcy5yZW5kZXJlZF0uam9pbihgIGApOyAvLyBQcmludCBlcnJvclxuXG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIHRoaXMub3V0cHV0RXJyb3IgKz0gdGhpcy5lcnJvck1zZy5zcGxpdChgXFxuYCkucmVkdWNlKChhLCBsLCBpKSA9PiBhICsgYFxcbiR7aSA/IGAgYCA6IGZpZ3VyZXMucG9pbnRlclNtYWxsfSAke2NvbG9yLnJlZCgpLml0YWxpYyhsKX1gLCBgYCk7XG4gICAgfVxuXG4gICAgdGhpcy5vdXQud3JpdGUoZXJhc2UubGluZSArIGN1cnNvci50bygwKSArIHRoaXMub3V0cHV0VGV4dCArIGN1cnNvci5zYXZlICsgdGhpcy5vdXRwdXRFcnJvciArIGN1cnNvci5yZXN0b3JlKTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyUHJvbXB0OyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuXG5jb25zdCBfcmVxdWlyZSA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKSxcbiAgICAgIGN1cnNvciA9IF9yZXF1aXJlLmN1cnNvcjtcblxuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcblxuY29uc3QgX3JlcXVpcmUyID0gcmVxdWlyZSgnLi4vdXRpbCcpLFxuICAgICAgY2xlYXIgPSBfcmVxdWlyZTIuY2xlYXIsXG4gICAgICBmaWd1cmVzID0gX3JlcXVpcmUyLmZpZ3VyZXMsXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlMi5zdHlsZSxcbiAgICAgIHdyYXAgPSBfcmVxdWlyZTIud3JhcCxcbiAgICAgIGVudHJpZXNUb0Rpc3BsYXkgPSBfcmVxdWlyZTIuZW50cmllc1RvRGlzcGxheTtcbi8qKlxuICogTXVsdGlzZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLndhcm5dIEhpbnQgc2hvd24gZm9yIGRpc2FibGVkIGNob2ljZXNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXhdIE1heCBjaG9pY2VzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm9wdGlvbnNQZXJQYWdlPTEwXSBNYXggb3B0aW9ucyB0byBkaXNwbGF5IGF0IG9uY2VcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5cblxuY2xhc3MgTXVsdGlzZWxlY3RQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmN1cnNvciA9IG9wdHMuY3Vyc29yIHx8IDA7XG4gICAgdGhpcy5zY3JvbGxJbmRleCA9IG9wdHMuY3Vyc29yIHx8IDA7XG4gICAgdGhpcy5oaW50ID0gb3B0cy5oaW50IHx8ICcnO1xuICAgIHRoaXMud2FybiA9IG9wdHMud2FybiB8fCAnLSBUaGlzIG9wdGlvbiBpcyBkaXNhYmxlZCAtJztcbiAgICB0aGlzLm1pblNlbGVjdGVkID0gb3B0cy5taW47XG4gICAgdGhpcy5zaG93TWluRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLm1heENob2ljZXMgPSBvcHRzLm1heDtcbiAgICB0aGlzLmluc3RydWN0aW9ucyA9IG9wdHMuaW5zdHJ1Y3Rpb25zO1xuICAgIHRoaXMub3B0aW9uc1BlclBhZ2UgPSBvcHRzLm9wdGlvbnNQZXJQYWdlIHx8IDEwO1xuICAgIHRoaXMudmFsdWUgPSBvcHRzLmNob2ljZXMubWFwKChjaCwgaWR4KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNoID09PSAnc3RyaW5nJykgY2ggPSB7XG4gICAgICAgIHRpdGxlOiBjaCxcbiAgICAgICAgdmFsdWU6IGlkeFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBjaCAmJiAoY2gudGl0bGUgfHwgY2gudmFsdWUgfHwgY2gpLFxuICAgICAgICBkZXNjcmlwdGlvbjogY2ggJiYgY2guZGVzY3JpcHRpb24sXG4gICAgICAgIHZhbHVlOiBjaCAmJiAoY2gudmFsdWUgPT09IHVuZGVmaW5lZCA/IGlkeCA6IGNoLnZhbHVlKSxcbiAgICAgICAgc2VsZWN0ZWQ6IGNoICYmIGNoLnNlbGVjdGVkLFxuICAgICAgICBkaXNhYmxlZDogY2ggJiYgY2guZGlzYWJsZWRcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcblxuICAgIGlmICghb3B0cy5vdmVycmlkZVJlbmRlcikge1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnZhbHVlLm1hcCh2ID0+ICF2LnNlbGVjdGVkKTtcbiAgICB0aGlzLmN1cnNvciA9IDA7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlLmZpbHRlcih2ID0+IHYuc2VsZWN0ZWQpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMudmFsdWUuZmlsdGVyKGUgPT4gZS5zZWxlY3RlZCk7XG5cbiAgICBpZiAodGhpcy5taW5TZWxlY3RlZCAmJiBzZWxlY3RlZC5sZW5ndGggPCB0aGlzLm1pblNlbGVjdGVkKSB7XG4gICAgICB0aGlzLnNob3dNaW5FcnJvciA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgZmlyc3QoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsYXN0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy52YWx1ZS5sZW5ndGggLSAxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gKHRoaXMuY3Vyc29yICsgMSkgJSB0aGlzLnZhbHVlLmxlbmd0aDtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSAwKSB7XG4gICAgICB0aGlzLmN1cnNvciA9IHRoaXMudmFsdWUubGVuZ3RoIC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJzb3ItLTtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IgPT09IHRoaXMudmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvcisrO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIHRoaXMudmFsdWVbdGhpcy5jdXJzb3JdLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJpZ2h0KCkge1xuICAgIGlmICh0aGlzLnZhbHVlLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpLmxlbmd0aCA+PSB0aGlzLm1heENob2ljZXMpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLnZhbHVlW3RoaXMuY3Vyc29yXS5zZWxlY3RlZCA9IHRydWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGhhbmRsZVNwYWNlVG9nZ2xlKCkge1xuICAgIGNvbnN0IHYgPSB0aGlzLnZhbHVlW3RoaXMuY3Vyc29yXTtcblxuICAgIGlmICh2LnNlbGVjdGVkKSB7XG4gICAgICB2LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0gZWxzZSBpZiAodi5kaXNhYmxlZCB8fCB0aGlzLnZhbHVlLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpLmxlbmd0aCA+PSB0aGlzLm1heENob2ljZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUFsbCgpIHtcbiAgICBpZiAodGhpcy5tYXhDaG9pY2VzICE9PSB1bmRlZmluZWQgfHwgdGhpcy52YWx1ZVt0aGlzLmN1cnNvcl0uZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdTZWxlY3RlZCA9ICF0aGlzLnZhbHVlW3RoaXMuY3Vyc29yXS5zZWxlY3RlZDtcbiAgICB0aGlzLnZhbHVlLmZpbHRlcih2ID0+ICF2LmRpc2FibGVkKS5mb3JFYWNoKHYgPT4gdi5zZWxlY3RlZCA9IG5ld1NlbGVjdGVkKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYyA9PT0gJyAnKSB7XG4gICAgICB0aGlzLmhhbmRsZVNwYWNlVG9nZ2xlKCk7XG4gICAgfSBlbHNlIGlmIChjID09PSAnYScpIHtcbiAgICAgIHRoaXMudG9nZ2xlQWxsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuaW5zdHJ1Y3Rpb25zID09PSB1bmRlZmluZWQgfHwgdGhpcy5pbnN0cnVjdGlvbnMpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnN0cnVjdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluc3RydWN0aW9ucztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICdcXG5JbnN0cnVjdGlvbnM6XFxuJyArIGAgICAgJHtmaWd1cmVzLmFycm93VXB9LyR7ZmlndXJlcy5hcnJvd0Rvd259OiBIaWdobGlnaHQgb3B0aW9uXFxuYCArIGAgICAgJHtmaWd1cmVzLmFycm93TGVmdH0vJHtmaWd1cmVzLmFycm93UmlnaHR9L1tzcGFjZV06IFRvZ2dsZSBzZWxlY3Rpb25cXG5gICsgKHRoaXMubWF4Q2hvaWNlcyA9PT0gdW5kZWZpbmVkID8gYCAgICBhOiBUb2dnbGUgYWxsXFxuYCA6ICcnKSArIGAgICAgZW50ZXIvcmV0dXJuOiBDb21wbGV0ZSBhbnN3ZXJgO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlck9wdGlvbihjdXJzb3IsIHYsIGksIGFycm93SW5kaWNhdG9yKSB7XG4gICAgY29uc3QgcHJlZml4ID0gKHYuc2VsZWN0ZWQgPyBjb2xvci5ncmVlbihmaWd1cmVzLnJhZGlvT24pIDogZmlndXJlcy5yYWRpb09mZikgKyAnICcgKyBhcnJvd0luZGljYXRvciArICcgJztcbiAgICBsZXQgdGl0bGUsIGRlc2M7XG5cbiAgICBpZiAodi5kaXNhYmxlZCkge1xuICAgICAgdGl0bGUgPSBjdXJzb3IgPT09IGkgPyBjb2xvci5ncmF5KCkudW5kZXJsaW5lKHYudGl0bGUpIDogY29sb3Iuc3RyaWtldGhyb3VnaCgpLmdyYXkodi50aXRsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpdGxlID0gY3Vyc29yID09PSBpID8gY29sb3IuY3lhbigpLnVuZGVybGluZSh2LnRpdGxlKSA6IHYudGl0bGU7XG5cbiAgICAgIGlmIChjdXJzb3IgPT09IGkgJiYgdi5kZXNjcmlwdGlvbikge1xuICAgICAgICBkZXNjID0gYCAtICR7di5kZXNjcmlwdGlvbn1gO1xuXG4gICAgICAgIGlmIChwcmVmaXgubGVuZ3RoICsgdGl0bGUubGVuZ3RoICsgZGVzYy5sZW5ndGggPj0gdGhpcy5vdXQuY29sdW1ucyB8fCB2LmRlc2NyaXB0aW9uLnNwbGl0KC9cXHI/XFxuLykubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGRlc2MgPSAnXFxuJyArIHdyYXAodi5kZXNjcmlwdGlvbiwge1xuICAgICAgICAgICAgbWFyZ2luOiBwcmVmaXgubGVuZ3RoLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMub3V0LmNvbHVtbnNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcmVmaXggKyB0aXRsZSArIGNvbG9yLmdyYXkoZGVzYyB8fCAnJyk7XG4gIH0gLy8gc2hhcmVkIHdpdGggYXV0b2NvbXBsZXRlTXVsdGlzZWxlY3RcblxuXG4gIHBhZ2luYXRlT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gY29sb3IucmVkKCdObyBtYXRjaGVzIGZvciB0aGlzIHF1ZXJ5LicpO1xuICAgIH1cblxuICAgIGxldCBfZW50cmllc1RvRGlzcGxheSA9IGVudHJpZXNUb0Rpc3BsYXkodGhpcy5jdXJzb3IsIG9wdGlvbnMubGVuZ3RoLCB0aGlzLm9wdGlvbnNQZXJQYWdlKSxcbiAgICAgICAgc3RhcnRJbmRleCA9IF9lbnRyaWVzVG9EaXNwbGF5LnN0YXJ0SW5kZXgsXG4gICAgICAgIGVuZEluZGV4ID0gX2VudHJpZXNUb0Rpc3BsYXkuZW5kSW5kZXg7XG5cbiAgICBsZXQgcHJlZml4LFxuICAgICAgICBzdHlsZWRPcHRpb25zID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA8IGVuZEluZGV4OyBpKyspIHtcbiAgICAgIGlmIChpID09PSBzdGFydEluZGV4ICYmIHN0YXJ0SW5kZXggPiAwKSB7XG4gICAgICAgIHByZWZpeCA9IGZpZ3VyZXMuYXJyb3dVcDtcbiAgICAgIH0gZWxzZSBpZiAoaSA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgcHJlZml4ID0gZmlndXJlcy5hcnJvd0Rvd247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcmVmaXggPSAnICc7XG4gICAgICB9XG5cbiAgICAgIHN0eWxlZE9wdGlvbnMucHVzaCh0aGlzLnJlbmRlck9wdGlvbih0aGlzLmN1cnNvciwgb3B0aW9uc1tpXSwgaSwgcHJlZml4KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICdcXG4nICsgc3R5bGVkT3B0aW9ucy5qb2luKCdcXG4nKTtcbiAgfSAvLyBzaGFyZWQgd2l0aCBhdXRvY29tbGV0ZU11bHRpc2VsZWN0XG5cblxuICByZW5kZXJPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAoIXRoaXMuZG9uZSkge1xuICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGVPcHRpb25zKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlckRvbmVPckluc3RydWN0aW9ucygpIHtcbiAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5tYXAodiA9PiB2LnRpdGxlKS5qb2luKCcsICcpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IFtjb2xvci5ncmF5KHRoaXMuaGludCksIHRoaXMucmVuZGVySW5zdHJ1Y3Rpb25zKCldO1xuXG4gICAgaWYgKHRoaXMudmFsdWVbdGhpcy5jdXJzb3JdLmRpc2FibGVkKSB7XG4gICAgICBvdXRwdXQucHVzaChjb2xvci55ZWxsb3codGhpcy53YXJuKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dC5qb2luKCcgJyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtcbiAgICBzdXBlci5yZW5kZXIoKTsgLy8gcHJpbnQgcHJvbXB0XG5cbiAgICBsZXQgcHJvbXB0ID0gW3N0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksIGNvbG9yLmJvbGQodGhpcy5tc2cpLCBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLCB0aGlzLnJlbmRlckRvbmVPckluc3RydWN0aW9ucygpXS5qb2luKCcgJyk7XG5cbiAgICBpZiAodGhpcy5zaG93TWluRXJyb3IpIHtcbiAgICAgIHByb21wdCArPSBjb2xvci5yZWQoYFlvdSBtdXN0IHNlbGVjdCBhIG1pbmltdW0gb2YgJHt0aGlzLm1pblNlbGVjdGVkfSBjaG9pY2VzLmApO1xuICAgICAgdGhpcy5zaG93TWluRXJyb3IgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcm9tcHQgKz0gdGhpcy5yZW5kZXJPcHRpb25zKHRoaXMudmFsdWUpO1xuICAgIHRoaXMub3V0LndyaXRlKHRoaXMuY2xlYXIgKyBwcm9tcHQpO1xuICAgIHRoaXMuY2xlYXIgPSBjbGVhcihwcm9tcHQsIHRoaXMub3V0LmNvbHVtbnMpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNdWx0aXNlbGVjdFByb21wdDsiLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbmNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcblxuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBlcmFzZSA9IF9yZXF1aXJlLmVyYXNlLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUuY3Vyc29yO1xuXG5jb25zdCBfcmVxdWlyZTIgPSByZXF1aXJlKCcuLi91dGlsJyksXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlMi5zdHlsZSxcbiAgICAgIGNsZWFyID0gX3JlcXVpcmUyLmNsZWFyLFxuICAgICAgZmlndXJlcyA9IF9yZXF1aXJlMi5maWd1cmVzLFxuICAgICAgd3JhcCA9IF9yZXF1aXJlMi53cmFwLFxuICAgICAgZW50cmllc1RvRGlzcGxheSA9IF9yZXF1aXJlMi5lbnRyaWVzVG9EaXNwbGF5O1xuXG5jb25zdCBnZXRWYWwgPSAoYXJyLCBpKSA9PiBhcnJbaV0gJiYgKGFycltpXS52YWx1ZSB8fCBhcnJbaV0udGl0bGUgfHwgYXJyW2ldKTtcblxuY29uc3QgZ2V0VGl0bGUgPSAoYXJyLCBpKSA9PiBhcnJbaV0gJiYgKGFycltpXS50aXRsZSB8fCBhcnJbaV0udmFsdWUgfHwgYXJyW2ldKTtcblxuY29uc3QgZ2V0SW5kZXggPSAoYXJyLCB2YWxPclRpdGxlKSA9PiB7XG4gIGNvbnN0IGluZGV4ID0gYXJyLmZpbmRJbmRleChlbCA9PiBlbC52YWx1ZSA9PT0gdmFsT3JUaXRsZSB8fCBlbC50aXRsZSA9PT0gdmFsT3JUaXRsZSk7XG4gIHJldHVybiBpbmRleCA+IC0xID8gaW5kZXggOiB1bmRlZmluZWQ7XG59O1xuLyoqXG4gKiBUZXh0UHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge0FycmF5fSBvcHRzLmNob2ljZXMgQXJyYXkgb2YgYXV0by1jb21wbGV0ZSBjaG9pY2VzIG9iamVjdHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLnN1Z2dlc3RdIEZpbHRlciBmdW5jdGlvbi4gRGVmYXVsdHMgdG8gc29ydCBieSB0aXRsZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmxpbWl0PTEwXSBNYXggbnVtYmVyIG9mIHJlc3VsdHMgdG8gc2hvd1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmN1cnNvcj0wXSBDdXJzb3Igc3RhcnQgcG9zaXRpb25cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5zdHlsZT0nZGVmYXVsdCddIFJlbmRlciBzdHlsZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmZhbGxiYWNrXSBGYWxsYmFjayBtZXNzYWdlIC0gaW5pdGlhbCB0byBkZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuaW5pdGlhbF0gSW5kZXggb2YgdGhlIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuY2xlYXJGaXJzdF0gVGhlIGZpcnN0IEVTQ0FQRSBrZXlwcmVzcyB3aWxsIGNsZWFyIHRoZSBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMubm9NYXRjaGVzXSBUaGUgbm8gbWF0Y2hlcyBmb3VuZCBsYWJlbFxuICovXG5cblxuY2xhc3MgQXV0b2NvbXBsZXRlUHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy5zdWdnZXN0ID0gb3B0cy5zdWdnZXN0O1xuICAgIHRoaXMuY2hvaWNlcyA9IG9wdHMuY2hvaWNlcztcbiAgICB0aGlzLmluaXRpYWwgPSB0eXBlb2Ygb3B0cy5pbml0aWFsID09PSAnbnVtYmVyJyA/IG9wdHMuaW5pdGlhbCA6IGdldEluZGV4KG9wdHMuY2hvaWNlcywgb3B0cy5pbml0aWFsKTtcbiAgICB0aGlzLnNlbGVjdCA9IHRoaXMuaW5pdGlhbCB8fCBvcHRzLmN1cnNvciB8fCAwO1xuICAgIHRoaXMuaTE4biA9IHtcbiAgICAgIG5vTWF0Y2hlczogb3B0cy5ub01hdGNoZXMgfHwgJ25vIG1hdGNoZXMgZm91bmQnXG4gICAgfTtcbiAgICB0aGlzLmZhbGxiYWNrID0gb3B0cy5mYWxsYmFjayB8fCB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5jbGVhckZpcnN0ID0gb3B0cy5jbGVhckZpcnN0IHx8IGZhbHNlO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBbXTtcbiAgICB0aGlzLmlucHV0ID0gJyc7XG4gICAgdGhpcy5saW1pdCA9IG9wdHMubGltaXQgfHwgMTA7XG4gICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIHRoaXMudHJhbnNmb3JtID0gc3R5bGUucmVuZGVyKG9wdHMuc3R5bGUpO1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZTtcbiAgICB0aGlzLnJlbmRlciA9IHRoaXMucmVuZGVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5jb21wbGV0ZSA9IHRoaXMuY29tcGxldGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLmNsZWFyID0gY2xlYXIoJycsIHRoaXMub3V0LmNvbHVtbnMpO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgZmFsbGJhY2soZmIpIHtcbiAgICB0aGlzLl9mYiA9IE51bWJlci5pc1NhZmVJbnRlZ2VyKHBhcnNlSW50KGZiKSkgPyBwYXJzZUludChmYikgOiBmYjtcbiAgfVxuXG4gIGdldCBmYWxsYmFjaygpIHtcbiAgICBsZXQgY2hvaWNlO1xuICAgIGlmICh0eXBlb2YgdGhpcy5fZmIgPT09ICdudW1iZXInKSBjaG9pY2UgPSB0aGlzLmNob2ljZXNbdGhpcy5fZmJdO2Vsc2UgaWYgKHR5cGVvZiB0aGlzLl9mYiA9PT0gJ3N0cmluZycpIGNob2ljZSA9IHtcbiAgICAgIHRpdGxlOiB0aGlzLl9mYlxuICAgIH07XG4gICAgcmV0dXJuIGNob2ljZSB8fCB0aGlzLl9mYiB8fCB7XG4gICAgICB0aXRsZTogdGhpcy5pMThuLm5vTWF0Y2hlc1xuICAgIH07XG4gIH1cblxuICBtb3ZlU2VsZWN0KGkpIHtcbiAgICB0aGlzLnNlbGVjdCA9IGk7XG4gICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkgdGhpcy52YWx1ZSA9IGdldFZhbCh0aGlzLnN1Z2dlc3Rpb25zLCBpKTtlbHNlIHRoaXMudmFsdWUgPSB0aGlzLmZhbGxiYWNrLnZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICB9XG5cbiAgY29tcGxldGUoY2IpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBjb25zdCBwID0gX3RoaXMuY29tcGxldGluZyA9IF90aGlzLnN1Z2dlc3QoX3RoaXMuaW5wdXQsIF90aGlzLmNob2ljZXMpO1xuXG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHlpZWxkIHA7XG4gICAgICBpZiAoX3RoaXMuY29tcGxldGluZyAhPT0gcCkgcmV0dXJuO1xuICAgICAgX3RoaXMuc3VnZ2VzdGlvbnMgPSBzdWdnZXN0aW9ucy5tYXAoKHMsIGksIGFycikgPT4gKHtcbiAgICAgICAgdGl0bGU6IGdldFRpdGxlKGFyciwgaSksXG4gICAgICAgIHZhbHVlOiBnZXRWYWwoYXJyLCBpKSxcbiAgICAgICAgZGVzY3JpcHRpb246IHMuZGVzY3JpcHRpb25cbiAgICAgIH0pKTtcbiAgICAgIF90aGlzLmNvbXBsZXRpbmcgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGwgPSBNYXRoLm1heChzdWdnZXN0aW9ucy5sZW5ndGggLSAxLCAwKTtcblxuICAgICAgX3RoaXMubW92ZVNlbGVjdChNYXRoLm1pbihsLCBfdGhpcy5zZWxlY3QpKTtcblxuICAgICAgY2IgJiYgY2IoKTtcbiAgICB9KSgpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5pbnB1dCA9ICcnO1xuICAgIHRoaXMuY29tcGxldGUoKCkgPT4ge1xuICAgICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuaW5pdGlhbCAhPT0gdm9pZCAwID8gdGhpcy5pbml0aWFsIDogMCk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0pO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIGlmICh0aGlzLmNsZWFyRmlyc3QgJiYgdGhpcy5pbnB1dC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRoaXMuZXhpdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5maXJlKCk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuZG9uZSA9IHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5leGl0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBzdWJtaXQoKSB7XG4gICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICB0aGlzLmFib3J0ZWQgPSB0aGlzLmV4aXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIF8oYywga2V5KSB7XG4gICAgbGV0IHMxID0gdGhpcy5pbnB1dC5zbGljZSgwLCB0aGlzLmN1cnNvcik7XG4gICAgbGV0IHMyID0gdGhpcy5pbnB1dC5zbGljZSh0aGlzLmN1cnNvcik7XG4gICAgdGhpcy5pbnB1dCA9IGAke3MxfSR7Y30ke3MyfWA7XG4gICAgdGhpcy5jdXJzb3IgPSBzMS5sZW5ndGggKyAxO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSAwKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgbGV0IHMxID0gdGhpcy5pbnB1dC5zbGljZSgwLCB0aGlzLmN1cnNvciAtIDEpO1xuICAgIGxldCBzMiA9IHRoaXMuaW5wdXQuc2xpY2UodGhpcy5jdXJzb3IpO1xuICAgIHRoaXMuaW5wdXQgPSBgJHtzMX0ke3MyfWA7XG4gICAgdGhpcy5jb21wbGV0ZSh0aGlzLnJlbmRlcik7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmN1cnNvciAtIDE7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGRlbGV0ZUZvcndhcmQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yICogdGhpcy5zY2FsZSA+PSB0aGlzLnJlbmRlcmVkLmxlbmd0aCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIGxldCBzMSA9IHRoaXMuaW5wdXQuc2xpY2UoMCwgdGhpcy5jdXJzb3IpO1xuICAgIGxldCBzMiA9IHRoaXMuaW5wdXQuc2xpY2UodGhpcy5jdXJzb3IgKyAxKTtcbiAgICB0aGlzLmlucHV0ID0gYCR7czF9JHtzMn1gO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBmaXJzdCgpIHtcbiAgICB0aGlzLm1vdmVTZWxlY3QoMCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxhc3QoKSB7XG4gICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdCA9PT0gMCkge1xuICAgICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCh0aGlzLnNlbGVjdCAtIDEpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdCA9PT0gdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLm1vdmVTZWxlY3QoMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCh0aGlzLnNlbGVjdCArIDEpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIGlmICh0aGlzLnNlbGVjdCA9PT0gdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLm1vdmVTZWxlY3QoMCk7XG4gICAgfSBlbHNlIHRoaXMubW92ZVNlbGVjdCh0aGlzLnNlbGVjdCArIDEpO1xuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG5leHRQYWdlKCkge1xuICAgIHRoaXMubW92ZVNlbGVjdChNYXRoLm1pbih0aGlzLnNlbGVjdCArIHRoaXMubGltaXQsIHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSkpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBwcmV2UGFnZSgpIHtcbiAgICB0aGlzLm1vdmVTZWxlY3QoTWF0aC5tYXgodGhpcy5zZWxlY3QgLSB0aGlzLmxpbWl0LCAwKSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxlZnQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yIDw9IDApIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMuY3Vyc29yIC0gMTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmlnaHQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yICogdGhpcy5zY2FsZSA+PSB0aGlzLnJlbmRlcmVkLmxlbmd0aCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5jdXJzb3IgKyAxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByZW5kZXJPcHRpb24odiwgaG92ZXJlZCwgaXNTdGFydCwgaXNFbmQpIHtcbiAgICBsZXQgZGVzYztcbiAgICBsZXQgcHJlZml4ID0gaXNTdGFydCA/IGZpZ3VyZXMuYXJyb3dVcCA6IGlzRW5kID8gZmlndXJlcy5hcnJvd0Rvd24gOiAnICc7XG4gICAgbGV0IHRpdGxlID0gaG92ZXJlZCA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodi50aXRsZSkgOiB2LnRpdGxlO1xuICAgIHByZWZpeCA9IChob3ZlcmVkID8gY29sb3IuY3lhbihmaWd1cmVzLnBvaW50ZXIpICsgJyAnIDogJyAgJykgKyBwcmVmaXg7XG5cbiAgICBpZiAodi5kZXNjcmlwdGlvbikge1xuICAgICAgZGVzYyA9IGAgLSAke3YuZGVzY3JpcHRpb259YDtcblxuICAgICAgaWYgKHByZWZpeC5sZW5ndGggKyB0aXRsZS5sZW5ndGggKyBkZXNjLmxlbmd0aCA+PSB0aGlzLm91dC5jb2x1bW5zIHx8IHYuZGVzY3JpcHRpb24uc3BsaXQoL1xccj9cXG4vKS5sZW5ndGggPiAxKSB7XG4gICAgICAgIGRlc2MgPSAnXFxuJyArIHdyYXAodi5kZXNjcmlwdGlvbiwge1xuICAgICAgICAgIG1hcmdpbjogMyxcbiAgICAgICAgICB3aWR0aDogdGhpcy5vdXQuY29sdW1uc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJlZml4ICsgJyAnICsgdGl0bGUgKyBjb2xvci5ncmF5KGRlc2MgfHwgJycpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7ZWxzZSB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICBzdXBlci5yZW5kZXIoKTtcblxuICAgIGxldCBfZW50cmllc1RvRGlzcGxheSA9IGVudHJpZXNUb0Rpc3BsYXkodGhpcy5zZWxlY3QsIHRoaXMuY2hvaWNlcy5sZW5ndGgsIHRoaXMubGltaXQpLFxuICAgICAgICBzdGFydEluZGV4ID0gX2VudHJpZXNUb0Rpc3BsYXkuc3RhcnRJbmRleCxcbiAgICAgICAgZW5kSW5kZXggPSBfZW50cmllc1RvRGlzcGxheS5lbmRJbmRleDtcblxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQsIHRoaXMuZXhpdGVkKSwgY29sb3IuYm9sZCh0aGlzLm1zZyksIHN0eWxlLmRlbGltaXRlcih0aGlzLmNvbXBsZXRpbmcpLCB0aGlzLmRvbmUgJiYgdGhpcy5zdWdnZXN0aW9uc1t0aGlzLnNlbGVjdF0gPyB0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuc2VsZWN0XS50aXRsZSA6IHRoaXMucmVuZGVyZWQgPSB0aGlzLnRyYW5zZm9ybS5yZW5kZXIodGhpcy5pbnB1dCldLmpvaW4oJyAnKTtcblxuICAgIGlmICghdGhpcy5kb25lKSB7XG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHRoaXMuc3VnZ2VzdGlvbnMuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpLm1hcCgoaXRlbSwgaSkgPT4gdGhpcy5yZW5kZXJPcHRpb24oaXRlbSwgdGhpcy5zZWxlY3QgPT09IGkgKyBzdGFydEluZGV4LCBpID09PSAwICYmIHN0YXJ0SW5kZXggPiAwLCBpICsgc3RhcnRJbmRleCA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgdGhpcy5jaG9pY2VzLmxlbmd0aCkpLmpvaW4oJ1xcbicpO1xuICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9IGBcXG5gICsgKHN1Z2dlc3Rpb25zIHx8IGNvbG9yLmdyYXkodGhpcy5mYWxsYmFjay50aXRsZSkpO1xuICAgIH1cblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBdXRvY29tcGxldGVQcm9tcHQ7IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5cbmNvbnN0IF9yZXF1aXJlID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUuY3Vyc29yO1xuXG5jb25zdCBNdWx0aXNlbGVjdFByb21wdCA9IHJlcXVpcmUoJy4vbXVsdGlzZWxlY3QnKTtcblxuY29uc3QgX3JlcXVpcmUyID0gcmVxdWlyZSgnLi4vdXRpbCcpLFxuICAgICAgY2xlYXIgPSBfcmVxdWlyZTIuY2xlYXIsXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlMi5zdHlsZSxcbiAgICAgIGZpZ3VyZXMgPSBfcmVxdWlyZTIuZmlndXJlcztcbi8qKlxuICogTXVsdGlzZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLndhcm5dIEhpbnQgc2hvd24gZm9yIGRpc2FibGVkIGNob2ljZXNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXhdIE1heCBjaG9pY2VzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKi9cblxuXG5jbGFzcyBBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdCBleHRlbmRzIE11bHRpc2VsZWN0UHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgb3B0cy5vdmVycmlkZVJlbmRlciA9IHRydWU7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gJyc7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxhc3QoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gKHRoaXMuY3Vyc29yICsgMSkgJSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGg7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gMCkge1xuICAgICAgdGhpcy5jdXJzb3IgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvci0tO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvcisrO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuY3Vyc29yXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByaWdodCgpIHtcbiAgICBpZiAodGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy5jdXJzb3JdLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlKCkge1xuICAgIGlmICh0aGlzLmlucHV0VmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmlucHV0VmFsdWUuc3Vic3RyKDAsIHRoaXMuaW5wdXRWYWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWRPcHRpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRmlsdGVyZWRPcHRpb25zKCkge1xuICAgIGNvbnN0IGN1cnJlbnRIaWdobGlnaHQgPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmN1cnNvcl07XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLnZhbHVlLmZpbHRlcih2ID0+IHtcbiAgICAgIGlmICh0aGlzLmlucHV0VmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2LnRpdGxlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh2LnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5pbnB1dFZhbHVlLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHYudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKHYudmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmlucHV0VmFsdWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gICAgY29uc3QgbmV3SGlnaGxpZ2h0SW5kZXggPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5maW5kSW5kZXgodiA9PiB2ID09PSBjdXJyZW50SGlnaGxpZ2h0KTtcbiAgICB0aGlzLmN1cnNvciA9IG5ld0hpZ2hsaWdodEluZGV4IDwgMCA/IDAgOiBuZXdIaWdobGlnaHRJbmRleDtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgaGFuZGxlU3BhY2VUb2dnbGUoKSB7XG4gICAgY29uc3QgdiA9IHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuY3Vyc29yXTtcblxuICAgIGlmICh2LnNlbGVjdGVkKSB7XG4gICAgICB2LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0gZWxzZSBpZiAodi5kaXNhYmxlZCB8fCB0aGlzLnZhbHVlLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpLmxlbmd0aCA+PSB0aGlzLm1heENob2ljZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUlucHV0Q2hhbmdlKGMpIHtcbiAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmlucHV0VmFsdWUgKyBjO1xuICAgIHRoaXMudXBkYXRlRmlsdGVyZWRPcHRpb25zKCk7XG4gIH1cblxuICBfKGMsIGtleSkge1xuICAgIGlmIChjID09PSAnICcpIHtcbiAgICAgIHRoaXMuaGFuZGxlU3BhY2VUb2dnbGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVJbnB1dENoYW5nZShjKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuaW5zdHJ1Y3Rpb25zID09PSB1bmRlZmluZWQgfHwgdGhpcy5pbnN0cnVjdGlvbnMpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnN0cnVjdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluc3RydWN0aW9ucztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGBcbkluc3RydWN0aW9uczpcbiAgICAke2ZpZ3VyZXMuYXJyb3dVcH0vJHtmaWd1cmVzLmFycm93RG93bn06IEhpZ2hsaWdodCBvcHRpb25cbiAgICAke2ZpZ3VyZXMuYXJyb3dMZWZ0fS8ke2ZpZ3VyZXMuYXJyb3dSaWdodH0vW3NwYWNlXTogVG9nZ2xlIHNlbGVjdGlvblxuICAgIFthLGIsY10vZGVsZXRlOiBGaWx0ZXIgY2hvaWNlc1xuICAgIGVudGVyL3JldHVybjogQ29tcGxldGUgYW5zd2VyXG5gO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlckN1cnJlbnRJbnB1dCgpIHtcbiAgICByZXR1cm4gYFxuRmlsdGVyZWQgcmVzdWx0cyBmb3I6ICR7dGhpcy5pbnB1dFZhbHVlID8gdGhpcy5pbnB1dFZhbHVlIDogY29sb3IuZ3JheSgnRW50ZXIgc29tZXRoaW5nIHRvIGZpbHRlcicpfVxcbmA7XG4gIH1cblxuICByZW5kZXJPcHRpb24oY3Vyc29yLCB2LCBpKSB7XG4gICAgbGV0IHRpdGxlO1xuICAgIGlmICh2LmRpc2FibGVkKSB0aXRsZSA9IGN1cnNvciA9PT0gaSA/IGNvbG9yLmdyYXkoKS51bmRlcmxpbmUodi50aXRsZSkgOiBjb2xvci5zdHJpa2V0aHJvdWdoKCkuZ3JheSh2LnRpdGxlKTtlbHNlIHRpdGxlID0gY3Vyc29yID09PSBpID8gY29sb3IuY3lhbigpLnVuZGVybGluZSh2LnRpdGxlKSA6IHYudGl0bGU7XG4gICAgcmV0dXJuICh2LnNlbGVjdGVkID8gY29sb3IuZ3JlZW4oZmlndXJlcy5yYWRpb09uKSA6IGZpZ3VyZXMucmFkaW9PZmYpICsgJyAgJyArIHRpdGxlO1xuICB9XG5cbiAgcmVuZGVyRG9uZU9ySW5zdHJ1Y3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpLm1hcCh2ID0+IHYudGl0bGUpLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gW2NvbG9yLmdyYXkodGhpcy5oaW50KSwgdGhpcy5yZW5kZXJJbnN0cnVjdGlvbnMoKSwgdGhpcy5yZW5kZXJDdXJyZW50SW5wdXQoKV07XG5cbiAgICBpZiAodGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoICYmIHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuY3Vyc29yXS5kaXNhYmxlZCkge1xuICAgICAgb3V0cHV0LnB1c2goY29sb3IueWVsbG93KHRoaXMud2FybikpO1xuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQuam9pbignICcpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7XG4gICAgc3VwZXIucmVuZGVyKCk7IC8vIHByaW50IHByb21wdFxuXG4gICAgbGV0IHByb21wdCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLCBjb2xvci5ib2xkKHRoaXMubXNnKSwgc3R5bGUuZGVsaW1pdGVyKGZhbHNlKSwgdGhpcy5yZW5kZXJEb25lT3JJbnN0cnVjdGlvbnMoKV0uam9pbignICcpO1xuXG4gICAgaWYgKHRoaXMuc2hvd01pbkVycm9yKSB7XG4gICAgICBwcm9tcHQgKz0gY29sb3IucmVkKGBZb3UgbXVzdCBzZWxlY3QgYSBtaW5pbXVtIG9mICR7dGhpcy5taW5TZWxlY3RlZH0gY2hvaWNlcy5gKTtcbiAgICAgIHRoaXMuc2hvd01pbkVycm9yID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJvbXB0ICs9IHRoaXMucmVuZGVyT3B0aW9ucyh0aGlzLmZpbHRlcmVkT3B0aW9ucyk7XG4gICAgdGhpcy5vdXQud3JpdGUodGhpcy5jbGVhciArIHByb21wdCk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKHByb21wdCwgdGhpcy5vdXQuY29sdW1ucyk7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEF1dG9jb21wbGV0ZU11bHRpc2VsZWN0UHJvbXB0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5cbmNvbnN0IFByb21wdCA9IHJlcXVpcmUoJy4vcHJvbXB0Jyk7XG5cbmNvbnN0IF9yZXF1aXJlID0gcmVxdWlyZSgnLi4vdXRpbCcpLFxuICAgICAgc3R5bGUgPSBfcmVxdWlyZS5zdHlsZSxcbiAgICAgIGNsZWFyID0gX3JlcXVpcmUuY2xlYXI7XG5cbmNvbnN0IF9yZXF1aXJlMiA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKSxcbiAgICAgIGVyYXNlID0gX3JlcXVpcmUyLmVyYXNlLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUyLmN1cnNvcjtcbi8qKlxuICogQ29uZmlybVByb21wdCBCYXNlIEVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLm1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5pbml0aWFsXSBEZWZhdWx0IHZhbHVlICh0cnVlL2ZhbHNlKVxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMueWVzXSBUaGUgXCJZZXNcIiBsYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnllc09wdGlvbl0gVGhlIFwiWWVzXCIgb3B0aW9uIHdoZW4gY2hvb3NpbmcgYmV0d2VlbiB5ZXMvbm9cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5ub10gVGhlIFwiTm9cIiBsYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm5vT3B0aW9uXSBUaGUgXCJOb1wiIG9wdGlvbiB3aGVuIGNob29zaW5nIGJldHdlZW4geWVzL25vXG4gKi9cblxuXG5jbGFzcyBDb25maXJtUHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy52YWx1ZSA9IG9wdHMuaW5pdGlhbDtcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9ICEhb3B0cy5pbml0aWFsO1xuICAgIHRoaXMueWVzTXNnID0gb3B0cy55ZXMgfHwgJ3llcyc7XG4gICAgdGhpcy55ZXNPcHRpb24gPSBvcHRzLnllc09wdGlvbiB8fCAnKFkvbiknO1xuICAgIHRoaXMubm9Nc2cgPSBvcHRzLm5vIHx8ICdubyc7XG4gICAgdGhpcy5ub09wdGlvbiA9IG9wdHMubm9PcHRpb24gfHwgJyh5L04pJztcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuaW5pdGlhbFZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuZG9uZSA9IHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlIHx8IGZhbHNlO1xuICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYy50b0xvd2VyQ2FzZSgpID09PSAneScpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0KCk7XG4gICAgfVxuXG4gICAgaWYgKGMudG9Mb3dlckNhc2UoKSA9PT0gJ24nKSB7XG4gICAgICB0aGlzLnZhbHVlID0gZmFsc2U7XG4gICAgICByZXR1cm4gdGhpcy5zdWJtaXQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtlbHNlIHRoaXMub3V0LndyaXRlKGNsZWFyKHRoaXMub3V0cHV0VGV4dCwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgIHN1cGVyLnJlbmRlcigpO1xuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLCBjb2xvci5ib2xkKHRoaXMubXNnKSwgc3R5bGUuZGVsaW1pdGVyKHRoaXMuZG9uZSksIHRoaXMuZG9uZSA/IHRoaXMudmFsdWUgPyB0aGlzLnllc01zZyA6IHRoaXMubm9Nc2cgOiBjb2xvci5ncmF5KHRoaXMuaW5pdGlhbFZhbHVlID8gdGhpcy55ZXNPcHRpb24gOiB0aGlzLm5vT3B0aW9uKV0uam9pbignICcpO1xuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb25maXJtUHJvbXB0OyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFRleHRQcm9tcHQ6IHJlcXVpcmUoJy4vdGV4dCcpLFxuICBTZWxlY3RQcm9tcHQ6IHJlcXVpcmUoJy4vc2VsZWN0JyksXG4gIFRvZ2dsZVByb21wdDogcmVxdWlyZSgnLi90b2dnbGUnKSxcbiAgRGF0ZVByb21wdDogcmVxdWlyZSgnLi9kYXRlJyksXG4gIE51bWJlclByb21wdDogcmVxdWlyZSgnLi9udW1iZXInKSxcbiAgTXVsdGlzZWxlY3RQcm9tcHQ6IHJlcXVpcmUoJy4vbXVsdGlzZWxlY3QnKSxcbiAgQXV0b2NvbXBsZXRlUHJvbXB0OiByZXF1aXJlKCcuL2F1dG9jb21wbGV0ZScpLFxuICBBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdDogcmVxdWlyZSgnLi9hdXRvY29tcGxldGVNdWx0aXNlbGVjdCcpLFxuICBDb25maXJtUHJvbXB0OiByZXF1aXJlKCcuL2NvbmZpcm0nKVxufTsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0ICQgPSBleHBvcnRzO1xuXG5jb25zdCBlbCA9IHJlcXVpcmUoJy4vZWxlbWVudHMnKTtcblxuY29uc3Qgbm9vcCA9IHYgPT4gdjtcblxuZnVuY3Rpb24gdG9Qcm9tcHQodHlwZSwgYXJncywgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICBjb25zdCBwID0gbmV3IGVsW3R5cGVdKGFyZ3MpO1xuICAgIGNvbnN0IG9uQWJvcnQgPSBvcHRzLm9uQWJvcnQgfHwgbm9vcDtcbiAgICBjb25zdCBvblN1Ym1pdCA9IG9wdHMub25TdWJtaXQgfHwgbm9vcDtcbiAgICBjb25zdCBvbkV4aXQgPSBvcHRzLm9uRXhpdCB8fCBub29wO1xuICAgIHAub24oJ3N0YXRlJywgYXJncy5vblN0YXRlIHx8IG5vb3ApO1xuICAgIHAub24oJ3N1Ym1pdCcsIHggPT4gcmVzKG9uU3VibWl0KHgpKSk7XG4gICAgcC5vbignZXhpdCcsIHggPT4gcmVzKG9uRXhpdCh4KSkpO1xuICAgIHAub24oJ2Fib3J0JywgeCA9PiByZWoob25BYm9ydCh4KSkpO1xuICB9KTtcbn1cbi8qKlxuICogVGV4dCBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmluaXRpYWxdIERlZmF1bHQgc3RyaW5nIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3R5bGU9XCJkZWZhdWx0XCJdIFJlbmRlciBzdHlsZSAoJ2RlZmF1bHQnLCAncGFzc3dvcmQnLCAnaW52aXNpYmxlJylcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cblxuXG4kLnRleHQgPSBhcmdzID0+IHRvUHJvbXB0KCdUZXh0UHJvbXB0JywgYXJncyk7XG4vKipcbiAqIFBhc3N3b3JkIHByb21wdCB3aXRoIG1hc2tlZCBpbnB1dFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cblxuXG4kLnBhc3N3b3JkID0gYXJncyA9PiB7XG4gIGFyZ3Muc3R5bGUgPSAncGFzc3dvcmQnO1xuICByZXR1cm4gJC50ZXh0KGFyZ3MpO1xufTtcbi8qKlxuICogUHJvbXB0IHdoZXJlIGlucHV0IGlzIGludmlzaWJsZSwgbGlrZSBzdWRvXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5pbml0aWFsXSBEZWZhdWx0IHN0cmluZyB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuXG5cbiQuaW52aXNpYmxlID0gYXJncyA9PiB7XG4gIGFyZ3Muc3R5bGUgPSAnaW52aXNpYmxlJztcbiAgcmV0dXJuICQudGV4dChhcmdzKTtcbn07XG4vKipcbiAqIE51bWJlciBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtudW1iZXJ9IGFyZ3MuaW5pdGlhbCBEZWZhdWx0IG51bWJlciB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MubWF4XSBNYXggdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5taW5dIE1pbiB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnN0eWxlPVwiZGVmYXVsdFwiXSBSZW5kZXIgc3R5bGUgKCdkZWZhdWx0JywgJ3Bhc3N3b3JkJywgJ2ludmlzaWJsZScpXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRzLmZsb2F0PWZhbHNlXSBQYXJzZSBpbnB1dCBhcyBmbG9hdHNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5yb3VuZD0yXSBSb3VuZCBmbG9hdHMgdG8geCBkZWNpbWFsc1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmluY3JlbWVudD0xXSBOdW1iZXIgdG8gaW5jcmVtZW50IGJ5IHdoZW4gdXNpbmcgYXJyb3cta2V5c1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cblxuXG4kLm51bWJlciA9IGFyZ3MgPT4gdG9Qcm9tcHQoJ051bWJlclByb21wdCcsIGFyZ3MpO1xuLyoqXG4gKiBEYXRlIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge251bWJlcn0gYXJncy5pbml0aWFsIERlZmF1bHQgbnVtYmVyIHZhbHVlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5tYXhdIE1heCB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1pbl0gTWluIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3R5bGU9XCJkZWZhdWx0XCJdIFJlbmRlciBzdHlsZSAoJ2RlZmF1bHQnLCAncGFzc3dvcmQnLCAnaW52aXNpYmxlJylcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuZmxvYXQ9ZmFsc2VdIFBhcnNlIGlucHV0IGFzIGZsb2F0c1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnJvdW5kPTJdIFJvdW5kIGZsb2F0cyB0byB4IGRlY2ltYWxzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5jcmVtZW50PTFdIE51bWJlciB0byBpbmNyZW1lbnQgYnkgd2hlbiB1c2luZyBhcnJvdy1rZXlzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuXG5cbiQuZGF0ZSA9IGFyZ3MgPT4gdG9Qcm9tcHQoJ0RhdGVQcm9tcHQnLCBhcmdzKTtcbi8qKlxuICogQ2xhc3NpYyB5ZXMvbm8gcHJvbXB0XG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FyZ3MuaW5pdGlhbD1mYWxzZV0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dFxuICovXG5cblxuJC5jb25maXJtID0gYXJncyA9PiB0b1Byb21wdCgnQ29uZmlybVByb21wdCcsIGFyZ3MpO1xuLyoqXG4gKiBMaXN0IHByb21wdCwgc3BsaXQgaW50cHV0IHN0cmluZyBieSBgc2VwZXJhdG9yYFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5zdHlsZT1cImRlZmF1bHRcIl0gUmVuZGVyIHN0eWxlICgnZGVmYXVsdCcsICdwYXNzd29yZCcsICdpbnZpc2libGUnKVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnNlcGFyYXRvcl0gU3RyaW5nIHNlcGFyYXRvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dCwgaW4gZm9ybSBvZiBhbiBgQXJyYXlgXG4gKi9cblxuXG4kLmxpc3QgPSBhcmdzID0+IHtcbiAgY29uc3Qgc2VwID0gYXJncy5zZXBhcmF0b3IgfHwgJywnO1xuICByZXR1cm4gdG9Qcm9tcHQoJ1RleHRQcm9tcHQnLCBhcmdzLCB7XG4gICAgb25TdWJtaXQ6IHN0ciA9PiBzdHIuc3BsaXQoc2VwKS5tYXAocyA9PiBzLnRyaW0oKSlcbiAgfSk7XG59O1xuLyoqXG4gKiBUb2dnbGUvc3dpdGNoIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmluaXRpYWw9ZmFsc2VdIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5hY3RpdmU9XCJvblwiXSBUZXh0IGZvciBgYWN0aXZlYCBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmluYWN0aXZlPVwib2ZmXCJdIFRleHQgZm9yIGBpbmFjdGl2ZWAgc3RhdGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuXG5cbiQudG9nZ2xlID0gYXJncyA9PiB0b1Byb21wdCgnVG9nZ2xlUHJvbXB0JywgYXJncyk7XG4vKipcbiAqIEludGVyYWN0aXZlIHNlbGVjdCBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtBcnJheX0gYXJncy5jaG9pY2VzIEFycmF5IG9mIGNob2ljZXMgb2JqZWN0cyBgW3sgdGl0bGUsIHZhbHVlIH0sIC4uLl1gXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MuaW5pdGlhbF0gSW5kZXggb2YgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFthcmdzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dFxuICovXG5cblxuJC5zZWxlY3QgPSBhcmdzID0+IHRvUHJvbXB0KCdTZWxlY3RQcm9tcHQnLCBhcmdzKTtcbi8qKlxuICogSW50ZXJhY3RpdmUgbXVsdGktc2VsZWN0IC8gYXV0b2NvbXBsZXRlTXVsdGlzZWxlY3QgcHJvbXB0XG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2VzIG9iamVjdHMgYFt7IHRpdGxlLCB2YWx1ZSwgW3NlbGVjdGVkXSB9LCAuLi5dYFxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1heF0gTWF4IHNlbGVjdFxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmhpbnRdIEhpbnQgdG8gZGlzcGxheSB1c2VyXG4gKiBAcGFyYW0ge051bWJlcn0gW2FyZ3MuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dFxuICovXG5cblxuJC5tdWx0aXNlbGVjdCA9IGFyZ3MgPT4ge1xuICBhcmdzLmNob2ljZXMgPSBbXS5jb25jYXQoYXJncy5jaG9pY2VzIHx8IFtdKTtcblxuICBjb25zdCB0b1NlbGVjdGVkID0gaXRlbXMgPT4gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zZWxlY3RlZCkubWFwKGl0ZW0gPT4gaXRlbS52YWx1ZSk7XG5cbiAgcmV0dXJuIHRvUHJvbXB0KCdNdWx0aXNlbGVjdFByb21wdCcsIGFyZ3MsIHtcbiAgICBvbkFib3J0OiB0b1NlbGVjdGVkLFxuICAgIG9uU3VibWl0OiB0b1NlbGVjdGVkXG4gIH0pO1xufTtcblxuJC5hdXRvY29tcGxldGVNdWx0aXNlbGVjdCA9IGFyZ3MgPT4ge1xuICBhcmdzLmNob2ljZXMgPSBbXS5jb25jYXQoYXJncy5jaG9pY2VzIHx8IFtdKTtcblxuICBjb25zdCB0b1NlbGVjdGVkID0gaXRlbXMgPT4gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zZWxlY3RlZCkubWFwKGl0ZW0gPT4gaXRlbS52YWx1ZSk7XG5cbiAgcmV0dXJuIHRvUHJvbXB0KCdBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdCcsIGFyZ3MsIHtcbiAgICBvbkFib3J0OiB0b1NlbGVjdGVkLFxuICAgIG9uU3VibWl0OiB0b1NlbGVjdGVkXG4gIH0pO1xufTtcblxuY29uc3QgYnlUaXRsZSA9IChpbnB1dCwgY2hvaWNlcykgPT4gUHJvbWlzZS5yZXNvbHZlKGNob2ljZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS50aXRsZS5zbGljZSgwLCBpbnB1dC5sZW5ndGgpLnRvTG93ZXJDYXNlKCkgPT09IGlucHV0LnRvTG93ZXJDYXNlKCkpKTtcbi8qKlxuICogSW50ZXJhY3RpdmUgYXV0by1jb21wbGV0ZSBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtBcnJheX0gYXJncy5jaG9pY2VzIEFycmF5IG9mIGF1dG8tY29tcGxldGUgY2hvaWNlcyBvYmplY3RzIGBbeyB0aXRsZSwgdmFsdWUgfSwgLi4uXWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFthcmdzLnN1Z2dlc3RdIEZ1bmN0aW9uIHRvIGZpbHRlciByZXN1bHRzIGJhc2VkIG9uIHVzZXIgaW5wdXQuIERlZmF1bHRzIHRvIHNvcnQgYnkgYHRpdGxlYFxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLmxpbWl0PTEwXSBNYXggbnVtYmVyIG9mIHJlc3VsdHMgdG8gc2hvd1xuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnN0eWxlPVwiZGVmYXVsdFwiXSBSZW5kZXIgc3R5bGUgKCdkZWZhdWx0JywgJ3Bhc3N3b3JkJywgJ2ludmlzaWJsZScpXG4gKiBAcGFyYW0ge1N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gSW5kZXggb2YgdGhlIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuY2xlYXJGaXJzdF0gVGhlIGZpcnN0IEVTQ0FQRSBrZXlwcmVzcyB3aWxsIGNsZWFyIHRoZSBpbnB1dFxuICogQHBhcmFtIHtTdHJpbmd9IFthcmdzLmZhbGxiYWNrXSBGYWxsYmFjayBtZXNzYWdlIC0gZGVmYXVsdHMgdG8gaW5pdGlhbCB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dFxuICovXG5cblxuJC5hdXRvY29tcGxldGUgPSBhcmdzID0+IHtcbiAgYXJncy5zdWdnZXN0ID0gYXJncy5zdWdnZXN0IHx8IGJ5VGl0bGU7XG4gIGFyZ3MuY2hvaWNlcyA9IFtdLmNvbmNhdChhcmdzLmNob2ljZXMgfHwgW10pO1xuICByZXR1cm4gdG9Qcm9tcHQoJ0F1dG9jb21wbGV0ZVByb21wdCcsIGFyZ3MpO1xufTsiLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIobywgYWxsb3dBcnJheUxpa2UpIHsgdmFyIGl0ID0gdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0gfHwgb1tcIkBAaXRlcmF0b3JcIl07IGlmICghaXQpIHsgaWYgKEFycmF5LmlzQXJyYXkobykgfHwgKGl0ID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8pKSB8fCBhbGxvd0FycmF5TGlrZSAmJiBvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgeyBpZiAoaXQpIG8gPSBpdDsgdmFyIGkgPSAwOyB2YXIgRiA9IGZ1bmN0aW9uIEYoKSB7fTsgcmV0dXJuIHsgczogRiwgbjogZnVuY3Rpb24gbigpIHsgaWYgKGkgPj0gby5sZW5ndGgpIHJldHVybiB7IGRvbmU6IHRydWUgfTsgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiBvW2krK10gfTsgfSwgZTogZnVuY3Rpb24gZShfZSkgeyB0aHJvdyBfZTsgfSwgZjogRiB9OyB9IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfSB2YXIgbm9ybWFsQ29tcGxldGlvbiA9IHRydWUsIGRpZEVyciA9IGZhbHNlLCBlcnI7IHJldHVybiB7IHM6IGZ1bmN0aW9uIHMoKSB7IGl0ID0gaXQuY2FsbChvKTsgfSwgbjogZnVuY3Rpb24gbigpIHsgdmFyIHN0ZXAgPSBpdC5uZXh0KCk7IG5vcm1hbENvbXBsZXRpb24gPSBzdGVwLmRvbmU7IHJldHVybiBzdGVwOyB9LCBlOiBmdW5jdGlvbiBlKF9lMikgeyBkaWRFcnIgPSB0cnVlOyBlcnIgPSBfZTI7IH0sIGY6IGZ1bmN0aW9uIGYoKSB7IHRyeSB7IGlmICghbm9ybWFsQ29tcGxldGlvbiAmJiBpdC5yZXR1cm4gIT0gbnVsbCkgaXQucmV0dXJuKCk7IH0gZmluYWxseSB7IGlmIChkaWRFcnIpIHRocm93IGVycjsgfSB9IH07IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbmNvbnN0IHByb21wdHMgPSByZXF1aXJlKCcuL3Byb21wdHMnKTtcblxuY29uc3QgcGFzc09uID0gWydzdWdnZXN0JywgJ2Zvcm1hdCcsICdvblN0YXRlJywgJ3ZhbGlkYXRlJywgJ29uUmVuZGVyJywgJ3R5cGUnXTtcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuLyoqXG4gKiBQcm9tcHQgZm9yIGEgc2VyaWVzIG9mIHF1ZXN0aW9uc1xuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IHF1ZXN0aW9ucyBTaW5nbGUgcXVlc3Rpb24gb2JqZWN0IG9yIEFycmF5IG9mIHF1ZXN0aW9uIG9iamVjdHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvblN1Ym1pdF0gQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIG9uIHByb21wdCBzdWJtaXRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvbkNhbmNlbF0gQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIG9uIGNhbmNlbC9hYm9ydFxuICogQHJldHVybnMge09iamVjdH0gT2JqZWN0IHdpdGggdmFsdWVzIGZyb20gdXNlciBpbnB1dFxuICovXG5cblxuZnVuY3Rpb24gcHJvbXB0KCkge1xuICByZXR1cm4gX3Byb21wdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBfcHJvbXB0KCkge1xuICBfcHJvbXB0ID0gX2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qIChxdWVzdGlvbnMgPSBbXSwge1xuICAgIG9uU3VibWl0ID0gbm9vcCxcbiAgICBvbkNhbmNlbCA9IG5vb3BcbiAgfSA9IHt9KSB7XG4gICAgY29uc3QgYW5zd2VycyA9IHt9O1xuICAgIGNvbnN0IG92ZXJyaWRlID0gcHJvbXB0Ll9vdmVycmlkZSB8fCB7fTtcbiAgICBxdWVzdGlvbnMgPSBbXS5jb25jYXQocXVlc3Rpb25zKTtcbiAgICBsZXQgYW5zd2VyLCBxdWVzdGlvbiwgcXVpdCwgbmFtZSwgdHlwZSwgbGFzdFByb21wdDtcblxuICAgIGNvbnN0IGdldEZvcm1hdHRlZEFuc3dlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3JlZiA9IF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAocXVlc3Rpb24sIGFuc3dlciwgc2tpcFZhbGlkYXRpb24gPSBmYWxzZSkge1xuICAgICAgICBpZiAoIXNraXBWYWxpZGF0aW9uICYmIHF1ZXN0aW9uLnZhbGlkYXRlICYmIHF1ZXN0aW9uLnZhbGlkYXRlKGFuc3dlcikgIT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcXVlc3Rpb24uZm9ybWF0ID8geWllbGQgcXVlc3Rpb24uZm9ybWF0KGFuc3dlciwgYW5zd2VycykgOiBhbnN3ZXI7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGdldEZvcm1hdHRlZEFuc3dlcihfeCwgX3gyKSB7XG4gICAgICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH0oKTtcblxuICAgIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihxdWVzdGlvbnMpLFxuICAgICAgICBfc3RlcDtcblxuICAgIHRyeSB7XG4gICAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgICBxdWVzdGlvbiA9IF9zdGVwLnZhbHVlO1xuICAgICAgICB2YXIgX3F1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgICAgIG5hbWUgPSBfcXVlc3Rpb24ubmFtZTtcbiAgICAgICAgdHlwZSA9IF9xdWVzdGlvbi50eXBlO1xuXG4gICAgICAgIC8vIGV2YWx1YXRlIHR5cGUgZmlyc3QgYW5kIHNraXAgaWYgdHlwZSBpcyBhIGZhbHN5IHZhbHVlXG4gICAgICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHR5cGUgPSB5aWVsZCB0eXBlKGFuc3dlciwgX29iamVjdFNwcmVhZCh7fSwgYW5zd2VycyksIHF1ZXN0aW9uKTtcbiAgICAgICAgICBxdWVzdGlvblsndHlwZSddID0gdHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdHlwZSkgY29udGludWU7IC8vIGlmIHByb3BlcnR5IGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCB1bmxlc3MgaXQncyBhIHNwZWNpYWwgZnVuY3Rpb25cblxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gcXVlc3Rpb24pIHtcbiAgICAgICAgICBpZiAocGFzc09uLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgICAgIGxldCB2YWx1ZSA9IHF1ZXN0aW9uW2tleV07XG4gICAgICAgICAgcXVlc3Rpb25ba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHlpZWxkIHZhbHVlKGFuc3dlciwgX29iamVjdFNwcmVhZCh7fSwgYW5zd2VycyksIGxhc3RQcm9tcHQpIDogdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UHJvbXB0ID0gcXVlc3Rpb247XG5cbiAgICAgICAgaWYgKHR5cGVvZiBxdWVzdGlvbi5tZXNzYWdlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncHJvbXB0IG1lc3NhZ2UgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgfSAvLyB1cGRhdGUgdmFycyBpbiBjYXNlIHRoZXkgY2hhbmdlZFxuXG5cbiAgICAgICAgdmFyIF9xdWVzdGlvbjIgPSBxdWVzdGlvbjtcbiAgICAgICAgbmFtZSA9IF9xdWVzdGlvbjIubmFtZTtcbiAgICAgICAgdHlwZSA9IF9xdWVzdGlvbjIudHlwZTtcblxuICAgICAgICBpZiAocHJvbXB0c1t0eXBlXSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcm9tcHQgdHlwZSAoJHt0eXBlfSkgaXMgbm90IGRlZmluZWRgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvdmVycmlkZVtxdWVzdGlvbi5uYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYW5zd2VyID0geWllbGQgZ2V0Rm9ybWF0dGVkQW5zd2VyKHF1ZXN0aW9uLCBvdmVycmlkZVtxdWVzdGlvbi5uYW1lXSk7XG5cbiAgICAgICAgICBpZiAoYW5zd2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFuc3dlcnNbbmFtZV0gPSBhbnN3ZXI7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEdldCB0aGUgaW5qZWN0ZWQgYW5zd2VyIGlmIHRoZXJlIGlzIG9uZSBvciBwcm9tcHQgdGhlIHVzZXJcbiAgICAgICAgICBhbnN3ZXIgPSBwcm9tcHQuX2luamVjdGVkID8gZ2V0SW5qZWN0ZWRBbnN3ZXIocHJvbXB0Ll9pbmplY3RlZCwgcXVlc3Rpb24uaW5pdGlhbCkgOiB5aWVsZCBwcm9tcHRzW3R5cGVdKHF1ZXN0aW9uKTtcbiAgICAgICAgICBhbnN3ZXJzW25hbWVdID0gYW5zd2VyID0geWllbGQgZ2V0Rm9ybWF0dGVkQW5zd2VyKHF1ZXN0aW9uLCBhbnN3ZXIsIHRydWUpO1xuICAgICAgICAgIHF1aXQgPSB5aWVsZCBvblN1Ym1pdChxdWVzdGlvbiwgYW5zd2VyLCBhbnN3ZXJzKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcXVpdCA9ICEoeWllbGQgb25DYW5jZWwocXVlc3Rpb24sIGFuc3dlcnMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChxdWl0KSByZXR1cm4gYW5zd2VycztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIF9pdGVyYXRvci5lKGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIF9pdGVyYXRvci5mKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuc3dlcnM7XG4gIH0pO1xuICByZXR1cm4gX3Byb21wdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBnZXRJbmplY3RlZEFuc3dlcihpbmplY3RlZCwgZGVhZnVsdFZhbHVlKSB7XG4gIGNvbnN0IGFuc3dlciA9IGluamVjdGVkLnNoaWZ0KCk7XG5cbiAgaWYgKGFuc3dlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgdGhyb3cgYW5zd2VyO1xuICB9XG5cbiAgcmV0dXJuIGFuc3dlciA9PT0gdW5kZWZpbmVkID8gZGVhZnVsdFZhbHVlIDogYW5zd2VyO1xufVxuXG5mdW5jdGlvbiBpbmplY3QoYW5zd2Vycykge1xuICBwcm9tcHQuX2luamVjdGVkID0gKHByb21wdC5faW5qZWN0ZWQgfHwgW10pLmNvbmNhdChhbnN3ZXJzKTtcbn1cblxuZnVuY3Rpb24gb3ZlcnJpZGUoYW5zd2Vycykge1xuICBwcm9tcHQuX292ZXJyaWRlID0gT2JqZWN0LmFzc2lnbih7fSwgYW5zd2Vycyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbihwcm9tcHQsIHtcbiAgcHJvbXB0LFxuICBwcm9tcHRzLFxuICBpbmplY3QsXG4gIG92ZXJyaWRlXG59KTsiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gKGtleSwgaXNTZWxlY3QpID0+IHtcbiAgaWYgKGtleS5tZXRhICYmIGtleS5uYW1lICE9PSAnZXNjYXBlJykgcmV0dXJuO1xuICBcbiAgaWYgKGtleS5jdHJsKSB7XG4gICAgaWYgKGtleS5uYW1lID09PSAnYScpIHJldHVybiAnZmlyc3QnO1xuICAgIGlmIChrZXkubmFtZSA9PT0gJ2MnKSByZXR1cm4gJ2Fib3J0JztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdkJykgcmV0dXJuICdhYm9ydCc7XG4gICAgaWYgKGtleS5uYW1lID09PSAnZScpIHJldHVybiAnbGFzdCc7XG4gICAgaWYgKGtleS5uYW1lID09PSAnZycpIHJldHVybiAncmVzZXQnO1xuICB9XG4gIFxuICBpZiAoaXNTZWxlY3QpIHtcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdqJykgcmV0dXJuICdkb3duJztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdrJykgcmV0dXJuICd1cCc7XG4gIH1cblxuICBpZiAoa2V5Lm5hbWUgPT09ICdyZXR1cm4nKSByZXR1cm4gJ3N1Ym1pdCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2VudGVyJykgcmV0dXJuICdzdWJtaXQnOyAvLyBjdHJsICsgSlxuICBpZiAoa2V5Lm5hbWUgPT09ICdiYWNrc3BhY2UnKSByZXR1cm4gJ2RlbGV0ZSc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2RlbGV0ZScpIHJldHVybiAnZGVsZXRlRm9yd2FyZCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2Fib3J0JykgcmV0dXJuICdhYm9ydCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2VzY2FwZScpIHJldHVybiAnZXhpdCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ3RhYicpIHJldHVybiAnbmV4dCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ3BhZ2Vkb3duJykgcmV0dXJuICduZXh0UGFnZSc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ3BhZ2V1cCcpIHJldHVybiAncHJldlBhZ2UnO1xuICAvLyBUT0RPIGNyZWF0ZSBob21lKCkgaW4gcHJvbXB0IHR5cGVzIChlLmcuIFRleHRQcm9tcHQpXG4gIGlmIChrZXkubmFtZSA9PT0gJ2hvbWUnKSByZXR1cm4gJ2hvbWUnO1xuICAvLyBUT0RPIGNyZWF0ZSBlbmQoKSBpbiBwcm9tcHQgdHlwZXMgKGUuZy4gVGV4dFByb21wdClcbiAgaWYgKGtleS5uYW1lID09PSAnZW5kJykgcmV0dXJuICdlbmQnO1xuXG4gIGlmIChrZXkubmFtZSA9PT0gJ3VwJykgcmV0dXJuICd1cCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2Rvd24nKSByZXR1cm4gJ2Rvd24nO1xuICBpZiAoa2V5Lm5hbWUgPT09ICdyaWdodCcpIHJldHVybiAncmlnaHQnO1xuICBpZiAoa2V5Lm5hbWUgPT09ICdsZWZ0JykgcmV0dXJuICdsZWZ0JztcblxuICByZXR1cm4gZmFsc2U7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0ciA9PiB7XG4gIGNvbnN0IHBhdHRlcm4gPSBbXG4gICAgJ1tcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNyknLFxuICAgICcoPzooPzpcXFxcZHsxLDR9KD86O1xcXFxkezAsNH0pKik/W1xcXFxkQS1QUlpjZi1udHFyeT0+PH5dKSknXG4gIF0uam9pbignfCcpO1xuXG4gIGNvbnN0IFJHWCA9IG5ldyBSZWdFeHAocGF0dGVybiwgJ2cnKTtcbiAgcmV0dXJuIHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnID8gc3RyLnJlcGxhY2UoUkdYLCAnJykgOiBzdHI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBzdHJpcCA9IHJlcXVpcmUoJy4vc3RyaXAnKTtcbmNvbnN0IHsgZXJhc2UsIGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuXG5jb25zdCB3aWR0aCA9IHN0ciA9PiBbLi4uc3RyaXAoc3RyKV0ubGVuZ3RoO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9tcHRcbiAqIEBwYXJhbSB7bnVtYmVyfSBwZXJMaW5lXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ocHJvbXB0LCBwZXJMaW5lKSB7XG4gIGlmICghcGVyTGluZSkgcmV0dXJuIGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCk7XG5cbiAgbGV0IHJvd3MgPSAwO1xuICBjb25zdCBsaW5lcyA9IHByb21wdC5zcGxpdCgvXFxyP1xcbi8pO1xuICBmb3IgKGxldCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgcm93cyArPSAxICsgTWF0aC5mbG9vcihNYXRoLm1heCh3aWR0aChsaW5lKSAtIDEsIDApIC8gcGVyTGluZSk7XG4gIH1cblxuICByZXR1cm4gZXJhc2UubGluZXMocm93cyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1x0XG5cbiBjb25zdCBtYWluID0ge1xuICBhcnJvd1VwOiAn4oaRJyxcbiAgYXJyb3dEb3duOiAn4oaTJyxcbiAgYXJyb3dMZWZ0OiAn4oaQJyxcbiAgYXJyb3dSaWdodDogJ+KGkicsXG4gIHJhZGlvT246ICfil4knLFxuICByYWRpb09mZjogJ+KXrycsXG4gIHRpY2s6ICfinJQnLFx0XG4gIGNyb3NzOiAn4pyWJyxcdFxuICBlbGxpcHNpczogJ+KApicsXHRcbiAgcG9pbnRlclNtYWxsOiAn4oC6JyxcdFxuICBsaW5lOiAn4pSAJyxcdFxuICBwb2ludGVyOiAn4p2vJ1x0XG59O1x0XG5jb25zdCB3aW4gPSB7XG4gIGFycm93VXA6IG1haW4uYXJyb3dVcCxcbiAgYXJyb3dEb3duOiBtYWluLmFycm93RG93bixcbiAgYXJyb3dMZWZ0OiBtYWluLmFycm93TGVmdCxcbiAgYXJyb3dSaWdodDogbWFpbi5hcnJvd1JpZ2h0LFxuICByYWRpb09uOiAnKCopJyxcbiAgcmFkaW9PZmY6ICcoICknLFx0XG4gIHRpY2s6ICfiiJonLFx0XG4gIGNyb3NzOiAnw5cnLFx0XG4gIGVsbGlwc2lzOiAnLi4uJyxcdFxuICBwb2ludGVyU21hbGw6ICfCuycsXHRcbiAgbGluZTogJ+KUgCcsXHRcbiAgcG9pbnRlcjogJz4nXHRcbn07XHRcbmNvbnN0IGZpZ3VyZXMgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gd2luIDogbWFpbjtcdFxuXG4gbW9kdWxlLmV4cG9ydHMgPSBmaWd1cmVzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjID0gcmVxdWlyZSgna2xldXInKTtcbmNvbnN0IGZpZ3VyZXMgPSByZXF1aXJlKCcuL2ZpZ3VyZXMnKTtcblxuLy8gcmVuZGVyaW5nIHVzZXIgaW5wdXQuXG5jb25zdCBzdHlsZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgcGFzc3dvcmQ6IHsgc2NhbGU6IDEsIHJlbmRlcjogaW5wdXQgPT4gJyonLnJlcGVhdChpbnB1dC5sZW5ndGgpIH0sXG4gIGVtb2ppOiB7IHNjYWxlOiAyLCByZW5kZXI6IGlucHV0ID0+ICfwn5iDJy5yZXBlYXQoaW5wdXQubGVuZ3RoKSB9LFxuICBpbnZpc2libGU6IHsgc2NhbGU6IDAsIHJlbmRlcjogaW5wdXQgPT4gJycgfSxcbiAgZGVmYXVsdDogeyBzY2FsZTogMSwgcmVuZGVyOiBpbnB1dCA9PiBgJHtpbnB1dH1gIH1cbn0pO1xuY29uc3QgcmVuZGVyID0gdHlwZSA9PiBzdHlsZXNbdHlwZV0gfHwgc3R5bGVzLmRlZmF1bHQ7XG5cbi8vIGljb24gdG8gc2lnbmFsaXplIGEgcHJvbXB0LlxuY29uc3Qgc3ltYm9scyA9IE9iamVjdC5mcmVlemUoe1xuICBhYm9ydGVkOiBjLnJlZChmaWd1cmVzLmNyb3NzKSxcbiAgZG9uZTogYy5ncmVlbihmaWd1cmVzLnRpY2spLFxuICBleGl0ZWQ6IGMueWVsbG93KGZpZ3VyZXMuY3Jvc3MpLFxuICBkZWZhdWx0OiBjLmN5YW4oJz8nKVxufSk7XG5cbmNvbnN0IHN5bWJvbCA9IChkb25lLCBhYm9ydGVkLCBleGl0ZWQpID0+XG4gIGFib3J0ZWQgPyBzeW1ib2xzLmFib3J0ZWQgOiBleGl0ZWQgPyBzeW1ib2xzLmV4aXRlZCA6IGRvbmUgPyBzeW1ib2xzLmRvbmUgOiBzeW1ib2xzLmRlZmF1bHQ7XG5cbi8vIGJldHdlZW4gdGhlIHF1ZXN0aW9uIGFuZCB0aGUgdXNlcidzIGlucHV0LlxuY29uc3QgZGVsaW1pdGVyID0gY29tcGxldGluZyA9PlxuICBjLmdyYXkoY29tcGxldGluZyA/IGZpZ3VyZXMuZWxsaXBzaXMgOiBmaWd1cmVzLnBvaW50ZXJTbWFsbCk7XG5cbmNvbnN0IGl0ZW0gPSAoZXhwYW5kYWJsZSwgZXhwYW5kZWQpID0+XG4gIGMuZ3JheShleHBhbmRhYmxlID8gKGV4cGFuZGVkID8gZmlndXJlcy5wb2ludGVyU21hbGwgOiAnKycpIDogZmlndXJlcy5saW5lKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0eWxlcyxcbiAgcmVuZGVyLFxuICBzeW1ib2xzLFxuICBzeW1ib2wsXG4gIGRlbGltaXRlcixcbiAgaXRlbVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3Qgc3RyaXAgPSByZXF1aXJlKCcuL3N0cmlwJyk7XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1zZ1xuICogQHBhcmFtIHtudW1iZXJ9IHBlckxpbmVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobXNnLCBwZXJMaW5lKSB7XG4gIGxldCBsaW5lcyA9IFN0cmluZyhzdHJpcChtc2cpIHx8ICcnKS5zcGxpdCgvXFxyP1xcbi8pO1xuXG4gIGlmICghcGVyTGluZSkgcmV0dXJuIGxpbmVzLmxlbmd0aDtcbiAgcmV0dXJuIGxpbmVzLm1hcChsID0+IE1hdGguY2VpbChsLmxlbmd0aCAvIHBlckxpbmUpKVxuICAgICAgLnJlZHVjZSgoYSwgYikgPT4gYSArIGIpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbXNnIFRoZSBtZXNzYWdlIHRvIHdyYXBcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRzXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IFtvcHRzLm1hcmdpbl0gTGVmdCBtYXJnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLndpZHRoIE1heGltdW0gY2hhcmFjdGVycyBwZXIgbGluZSBpbmNsdWRpbmcgdGhlIG1hcmdpblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IChtc2csIG9wdHMgPSB7fSkgPT4ge1xuICBjb25zdCB0YWIgPSBOdW1iZXIuaXNTYWZlSW50ZWdlcihwYXJzZUludChvcHRzLm1hcmdpbikpXG4gICAgPyBuZXcgQXJyYXkocGFyc2VJbnQob3B0cy5tYXJnaW4pKS5maWxsKCcgJykuam9pbignJylcbiAgICA6IChvcHRzLm1hcmdpbiB8fCAnJyk7XG5cbiAgY29uc3Qgd2lkdGggPSBvcHRzLndpZHRoO1xuXG4gIHJldHVybiAobXNnIHx8ICcnKS5zcGxpdCgvXFxyP1xcbi9nKVxuICAgIC5tYXAobGluZSA9PiBsaW5lXG4gICAgICAuc3BsaXQoL1xccysvZylcbiAgICAgIC5yZWR1Y2UoKGFyciwgdykgPT4ge1xuICAgICAgICBpZiAody5sZW5ndGggKyB0YWIubGVuZ3RoID49IHdpZHRoIHx8IGFyclthcnIubGVuZ3RoIC0gMV0ubGVuZ3RoICsgdy5sZW5ndGggKyAxIDwgd2lkdGgpXG4gICAgICAgICAgYXJyW2Fyci5sZW5ndGggLSAxXSArPSBgICR7d31gO1xuICAgICAgICBlbHNlIGFyci5wdXNoKGAke3RhYn0ke3d9YCk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgICB9LCBbIHRhYiBdKVxuICAgICAgLmpvaW4oJ1xcbicpKVxuICAgIC5qb2luKCdcXG4nKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoYXQgZW50cmllcyBzaG91bGQgYmUgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW4sIGJhc2VkIG9uIHRoZVxuICogY3VycmVudGx5IHNlbGVjdGVkIGluZGV4IGFuZCB0aGUgbWF4aW11bSB2aXNpYmxlLiBVc2VkIGluIGxpc3QtYmFzZWRcbiAqIHByb21wdHMgbGlrZSBgc2VsZWN0YCBhbmQgYG11bHRpc2VsZWN0YC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gY3Vyc29yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZW50cnlcbiAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbCB0aGUgdG90YWwgZW50cmllcyBhdmFpbGFibGUgdG8gZGlzcGxheVxuICogQHBhcmFtIHtudW1iZXJ9IFttYXhWaXNpYmxlXSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhhdCBjYW4gYmUgZGlzcGxheWVkXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gKGN1cnNvciwgdG90YWwsIG1heFZpc2libGUpICA9PiB7XG4gIG1heFZpc2libGUgPSBtYXhWaXNpYmxlIHx8IHRvdGFsO1xuXG4gIGxldCBzdGFydEluZGV4ID0gTWF0aC5taW4odG90YWwtIG1heFZpc2libGUsIGN1cnNvciAtIE1hdGguZmxvb3IobWF4VmlzaWJsZSAvIDIpKTtcbiAgaWYgKHN0YXJ0SW5kZXggPCAwKSBzdGFydEluZGV4ID0gMDtcblxuICBsZXQgZW5kSW5kZXggPSBNYXRoLm1pbihzdGFydEluZGV4ICsgbWF4VmlzaWJsZSwgdG90YWwpO1xuXG4gIHJldHVybiB7IHN0YXJ0SW5kZXgsIGVuZEluZGV4IH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWN0aW9uOiByZXF1aXJlKCcuL2FjdGlvbicpLFxuICBjbGVhcjogcmVxdWlyZSgnLi9jbGVhcicpLFxuICBzdHlsZTogcmVxdWlyZSgnLi9zdHlsZScpLFxuICBzdHJpcDogcmVxdWlyZSgnLi9zdHJpcCcpLFxuICBmaWd1cmVzOiByZXF1aXJlKCcuL2ZpZ3VyZXMnKSxcbiAgbGluZXM6IHJlcXVpcmUoJy4vbGluZXMnKSxcbiAgd3JhcDogcmVxdWlyZSgnLi93cmFwJyksXG4gIGVudHJpZXNUb0Rpc3BsYXk6IHJlcXVpcmUoJy4vZW50cmllc1RvRGlzcGxheScpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCByZWFkbGluZSA9IHJlcXVpcmUoJ3JlYWRsaW5lJyk7XG5jb25zdCB7IGFjdGlvbiB9ID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJyk7XG5jb25zdCB7IGJlZXAsIGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuXG4vKipcbiAqIEJhc2UgcHJvbXB0IHNrZWxldG9uXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqL1xuY2xhc3MgUHJvbXB0IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmZpcnN0UmVuZGVyID0gdHJ1ZTtcbiAgICB0aGlzLmluID0gb3B0cy5zdGRpbiB8fCBwcm9jZXNzLnN0ZGluO1xuICAgIHRoaXMub3V0ID0gb3B0cy5zdGRvdXQgfHwgcHJvY2Vzcy5zdGRvdXQ7XG4gICAgdGhpcy5vblJlbmRlciA9IChvcHRzLm9uUmVuZGVyIHx8ICgoKSA9PiB2b2lkIDApKS5iaW5kKHRoaXMpO1xuICAgIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHsgaW5wdXQ6dGhpcy5pbiwgZXNjYXBlQ29kZVRpbWVvdXQ6NTAgfSk7XG4gICAgcmVhZGxpbmUuZW1pdEtleXByZXNzRXZlbnRzKHRoaXMuaW4sIHJsKTtcblxuICAgIGlmICh0aGlzLmluLmlzVFRZKSB0aGlzLmluLnNldFJhd01vZGUodHJ1ZSk7XG4gICAgY29uc3QgaXNTZWxlY3QgPSBbICdTZWxlY3RQcm9tcHQnLCAnTXVsdGlzZWxlY3RQcm9tcHQnIF0uaW5kZXhPZih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpID4gLTE7XG4gICAgY29uc3Qga2V5cHJlc3MgPSAoc3RyLCBrZXkpID0+IHtcbiAgICAgIGxldCBhID0gYWN0aW9uKGtleSwgaXNTZWxlY3QpO1xuICAgICAgaWYgKGEgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuXyAmJiB0aGlzLl8oc3RyLCBrZXkpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpc1thXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzW2FdKGtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJlbGwoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5jbG9zZSA9ICgpID0+IHtcbiAgICAgIHRoaXMub3V0LndyaXRlKGN1cnNvci5zaG93KTtcbiAgICAgIHRoaXMuaW4ucmVtb3ZlTGlzdGVuZXIoJ2tleXByZXNzJywga2V5cHJlc3MpO1xuICAgICAgaWYgKHRoaXMuaW4uaXNUVFkpIHRoaXMuaW4uc2V0UmF3TW9kZShmYWxzZSk7XG4gICAgICBybC5jbG9zZSgpO1xuICAgICAgdGhpcy5lbWl0KHRoaXMuYWJvcnRlZCA/ICdhYm9ydCcgOiB0aGlzLmV4aXRlZCA/ICdleGl0JyA6ICdzdWJtaXQnLCB0aGlzLnZhbHVlKTtcbiAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgdGhpcy5pbi5vbigna2V5cHJlc3MnLCBrZXlwcmVzcyk7XG4gIH1cblxuICBmaXJlKCkge1xuICAgIHRoaXMuZW1pdCgnc3RhdGUnLCB7XG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIGFib3J0ZWQ6ICEhdGhpcy5hYm9ydGVkLFxuICAgICAgZXhpdGVkOiAhIXRoaXMuZXhpdGVkXG4gICAgfSk7XG4gIH1cblxuICBiZWxsKCkge1xuICAgIHRoaXMub3V0LndyaXRlKGJlZXApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMub25SZW5kZXIoY29sb3IpO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLmZpcnN0UmVuZGVyID0gZmFsc2U7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQcm9tcHQ7XG4iLCJjb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5jb25zdCBQcm9tcHQgPSByZXF1aXJlKCcuL3Byb21wdCcpO1xuY29uc3QgeyBlcmFzZSwgY3Vyc29yIH0gPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyk7XG5jb25zdCB7IHN0eWxlLCBjbGVhciwgbGluZXMsIGZpZ3VyZXMgfSA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcblxuLyoqXG4gKiBUZXh0UHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuc3R5bGU9J2RlZmF1bHQnXSBSZW5kZXIgc3R5bGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbml0aWFsXSBEZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy52YWxpZGF0ZV0gVmFsaWRhdGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmVycm9yXSBUaGUgaW52YWxpZCBlcnJvciBsYWJlbFxuICovXG5jbGFzcyBUZXh0UHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMudHJhbnNmb3JtID0gc3R5bGUucmVuZGVyKG9wdHMuc3R5bGUpO1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmluaXRpYWwgPSBvcHRzLmluaXRpYWwgfHwgYGA7XG4gICAgdGhpcy52YWxpZGF0b3IgPSBvcHRzLnZhbGlkYXRlIHx8ICgoKSA9PiB0cnVlKTtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5lcnJvck1zZyA9IG9wdHMuZXJyb3IgfHwgYFBsZWFzZSBFbnRlciBBIFZhbGlkIFZhbHVlYDtcbiAgICB0aGlzLmN1cnNvciA9IE51bWJlcighIXRoaXMuaW5pdGlhbCk7XG4gICAgdGhpcy5jdXJzb3JPZmZzZXQgPSAwO1xuICAgIHRoaXMuY2xlYXIgPSBjbGVhcihgYCwgdGhpcy5vdXQuY29sdW1ucyk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2KSB7XG4gICAgaWYgKCF2ICYmIHRoaXMuaW5pdGlhbCkge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlcmVkID0gY29sb3IuZ3JheSh0aGlzLnRyYW5zZm9ybS5yZW5kZXIodGhpcy5pbml0aWFsKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVuZGVyZWQgPSB0aGlzLnRyYW5zZm9ybS5yZW5kZXIodik7XG4gICAgfVxuICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICB0aGlzLmZpcmUoKTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5jdXJzb3IgPSBOdW1iZXIoISF0aGlzLmluaXRpYWwpO1xuICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZSB8fCB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZSgpIHtcbiAgICBsZXQgdmFsaWQgPSBhd2FpdCB0aGlzLnZhbGlkYXRvcih0aGlzLnZhbHVlKTtcbiAgICBpZiAodHlwZW9mIHZhbGlkID09PSBgc3RyaW5nYCkge1xuICAgICAgdGhpcy5lcnJvck1zZyA9IHZhbGlkO1xuICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5lcnJvciA9ICF2YWxpZDtcbiAgfVxuXG4gIGFzeW5jIHN1Ym1pdCgpIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZSB8fCB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5jdXJzb3JPZmZzZXQgPSAwO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5yZW5kZXJlZC5sZW5ndGg7XG4gICAgYXdhaXQgdGhpcy52YWxpZGF0ZSgpO1xuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aGlzLnJlZCA9IHRydWU7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICBpZiAoIXRoaXMucGxhY2Vob2xkZXIpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5pbml0aWFsO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5yZW5kZXJlZC5sZW5ndGg7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKSByZXR1cm47XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmN1cnNvcituO1xuICAgIHRoaXMuY3Vyc29yT2Zmc2V0ICs9IG47XG4gIH1cblxuICBfKGMsIGtleSkge1xuICAgIGxldCBzMSA9IHRoaXMudmFsdWUuc2xpY2UoMCwgdGhpcy5jdXJzb3IpO1xuICAgIGxldCBzMiA9IHRoaXMudmFsdWUuc2xpY2UodGhpcy5jdXJzb3IpO1xuICAgIHRoaXMudmFsdWUgPSBgJHtzMX0ke2N9JHtzMn1gO1xuICAgIHRoaXMucmVkID0gZmFsc2U7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLnBsYWNlaG9sZGVyID8gMCA6IHMxLmxlbmd0aCsxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgaWYgKHRoaXMuaXNDdXJzb3JBdFN0YXJ0KCkpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICBsZXQgczEgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIHRoaXMuY3Vyc29yLTEpO1xuICAgIGxldCBzMiA9IHRoaXMudmFsdWUuc2xpY2UodGhpcy5jdXJzb3IpO1xuICAgIHRoaXMudmFsdWUgPSBgJHtzMX0ke3MyfWA7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5pc0N1cnNvckF0U3RhcnQoKSkge1xuICAgICAgdGhpcy5jdXJzb3JPZmZzZXQgPSAwXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3Vyc29yT2Zmc2V0Kys7XG4gICAgICB0aGlzLm1vdmVDdXJzb3IoLTEpO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlRm9yd2FyZCgpIHtcbiAgICBpZih0aGlzLmN1cnNvcip0aGlzLnNjYWxlID49IHRoaXMucmVuZGVyZWQubGVuZ3RoIHx8IHRoaXMucGxhY2Vob2xkZXIpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICBsZXQgczEgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIHRoaXMuY3Vyc29yKTtcbiAgICBsZXQgczIgPSB0aGlzLnZhbHVlLnNsaWNlKHRoaXMuY3Vyc29yKzEpO1xuICAgIHRoaXMudmFsdWUgPSBgJHtzMX0ke3MyfWA7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5pc0N1cnNvckF0RW5kKCkpIHtcbiAgICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJzb3JPZmZzZXQrKztcbiAgICB9XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGZpcnN0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gMDtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbGFzdCgpIHtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMudmFsdWUubGVuZ3RoO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA8PSAwIHx8IHRoaXMucGxhY2Vob2xkZXIpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLm1vdmVDdXJzb3IoLTEpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByaWdodCgpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IqdGhpcy5zY2FsZSA+PSB0aGlzLnJlbmRlcmVkLmxlbmd0aCB8fCB0aGlzLnBsYWNlaG9sZGVyKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy5tb3ZlQ3Vyc29yKDEpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBpc0N1cnNvckF0U3RhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3Vyc29yID09PSAwIHx8ICh0aGlzLnBsYWNlaG9sZGVyICYmIHRoaXMuY3Vyc29yID09PSAxKTtcbiAgfVxuXG4gIGlzQ3Vyc29yQXRFbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3Vyc29yID09PSB0aGlzLnJlbmRlcmVkLmxlbmd0aCB8fCAodGhpcy5wbGFjZWhvbGRlciAmJiB0aGlzLmN1cnNvciA9PT0gdGhpcy5yZW5kZXJlZC5sZW5ndGggKyAxKVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5maXJzdFJlbmRlcikge1xuICAgICAgaWYgKHRoaXMub3V0cHV0RXJyb3IpXG4gICAgICAgIHRoaXMub3V0LndyaXRlKGN1cnNvci5kb3duKGxpbmVzKHRoaXMub3V0cHV0RXJyb3IsIHRoaXMub3V0LmNvbHVtbnMpIC0gMSkgKyBjbGVhcih0aGlzLm91dHB1dEVycm9yLCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgICB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICB9XG4gICAgc3VwZXIucmVuZGVyKCk7XG4gICAgdGhpcy5vdXRwdXRFcnJvciA9ICcnO1xuXG4gICAgdGhpcy5vdXRwdXRUZXh0ID0gW1xuICAgICAgc3R5bGUuc3ltYm9sKHRoaXMuZG9uZSwgdGhpcy5hYm9ydGVkKSxcbiAgICAgIGNvbG9yLmJvbGQodGhpcy5tc2cpLFxuICAgICAgc3R5bGUuZGVsaW1pdGVyKHRoaXMuZG9uZSksXG4gICAgICB0aGlzLnJlZCA/IGNvbG9yLnJlZCh0aGlzLnJlbmRlcmVkKSA6IHRoaXMucmVuZGVyZWRcbiAgICBdLmpvaW4oYCBgKTtcblxuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aGlzLm91dHB1dEVycm9yICs9IHRoaXMuZXJyb3JNc2cuc3BsaXQoYFxcbmApXG4gICAgICAgICAgLnJlZHVjZSgoYSwgbCwgaSkgPT4gYSArIGBcXG4ke2kgPyAnICcgOiBmaWd1cmVzLnBvaW50ZXJTbWFsbH0gJHtjb2xvci5yZWQoKS5pdGFsaWMobCl9YCwgYGApO1xuICAgIH1cblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQgKyBjdXJzb3Iuc2F2ZSArIHRoaXMub3V0cHV0RXJyb3IgKyBjdXJzb3IucmVzdG9yZSArIGN1cnNvci5tb3ZlKHRoaXMuY3Vyc29yT2Zmc2V0LCAwKSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0UHJvbXB0OyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcbmNvbnN0IHsgc3R5bGUsIGNsZWFyLCBmaWd1cmVzLCB3cmFwLCBlbnRyaWVzVG9EaXNwbGF5IH0gPSByZXF1aXJlKCcuLi91dGlsJyk7XG5jb25zdCB7IGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuXG4vKipcbiAqIFNlbGVjdFByb21wdCBCYXNlIEVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLm1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHtBcnJheX0gb3B0cy5jaG9pY2VzIEFycmF5IG9mIGNob2ljZSBvYmplY3RzXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuaGludF0gSGludCB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5pdGlhbF0gSW5kZXggb2YgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMub3B0aW9uc1BlclBhZ2U9MTBdIE1heCBvcHRpb25zIHRvIGRpc3BsYXkgYXQgb25jZVxuICovXG5jbGFzcyBTZWxlY3RQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy5oaW50ID0gb3B0cy5oaW50IHx8ICctIFVzZSBhcnJvdy1rZXlzLiBSZXR1cm4gdG8gc3VibWl0Lic7XG4gICAgdGhpcy53YXJuID0gb3B0cy53YXJuIHx8ICctIFRoaXMgb3B0aW9uIGlzIGRpc2FibGVkJztcbiAgICB0aGlzLmN1cnNvciA9IG9wdHMuaW5pdGlhbCB8fCAwO1xuICAgIHRoaXMuY2hvaWNlcyA9IG9wdHMuY2hvaWNlcy5tYXAoKGNoLCBpZHgpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgY2ggPT09ICdzdHJpbmcnKVxuICAgICAgICBjaCA9IHt0aXRsZTogY2gsIHZhbHVlOiBpZHh9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGl0bGU6IGNoICYmIChjaC50aXRsZSB8fCBjaC52YWx1ZSB8fCBjaCksXG4gICAgICAgIHZhbHVlOiBjaCAmJiAoY2gudmFsdWUgPT09IHVuZGVmaW5lZCA/IGlkeCA6IGNoLnZhbHVlKSxcbiAgICAgICAgZGVzY3JpcHRpb246IGNoICYmIGNoLmRlc2NyaXB0aW9uLFxuICAgICAgICBzZWxlY3RlZDogY2ggJiYgY2guc2VsZWN0ZWQsXG4gICAgICAgIGRpc2FibGVkOiBjaCAmJiBjaC5kaXNhYmxlZFxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLm9wdGlvbnNQZXJQYWdlID0gb3B0cy5vcHRpb25zUGVyUGFnZSB8fCAxMDtcbiAgICB0aGlzLnZhbHVlID0gKHRoaXMuY2hvaWNlc1t0aGlzLmN1cnNvcl0gfHwge30pLnZhbHVlO1xuICAgIHRoaXMuY2xlYXIgPSBjbGVhcignJywgdGhpcy5vdXQuY29sdW1ucyk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIHRoaXMuY3Vyc29yID0gbjtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5jaG9pY2VzW25dLnZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5tb3ZlQ3Vyc29yKDApO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuZG9uZSA9IHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIGlmICghdGhpcy5zZWxlY3Rpb24uZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZmlyZSgpO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9IGVsc2VcbiAgICAgIHRoaXMuYmVsbCgpO1xuICB9XG5cbiAgZmlyc3QoKSB7XG4gICAgdGhpcy5tb3ZlQ3Vyc29yKDApO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsYXN0KCkge1xuICAgIHRoaXMubW92ZUN1cnNvcih0aGlzLmNob2ljZXMubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gMCkge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY2hvaWNlcy5sZW5ndGggLSAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY3Vyc29yIC0gMSk7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gdGhpcy5jaG9pY2VzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHRoaXMubW92ZUN1cnNvcigwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY3Vyc29yICsgMSk7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMubW92ZUN1cnNvcigodGhpcy5jdXJzb3IgKyAxKSAlIHRoaXMuY2hvaWNlcy5sZW5ndGgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBfKGMsIGtleSkge1xuICAgIGlmIChjID09PSAnICcpIHJldHVybiB0aGlzLnN1Ym1pdCgpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5jaG9pY2VzW3RoaXMuY3Vyc29yXTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5maXJzdFJlbmRlcikgdGhpcy5vdXQud3JpdGUoY3Vyc29yLmhpZGUpO1xuICAgIGVsc2UgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG5cbiAgICBsZXQgeyBzdGFydEluZGV4LCBlbmRJbmRleCB9ID0gZW50cmllc1RvRGlzcGxheSh0aGlzLmN1cnNvciwgdGhpcy5jaG9pY2VzLmxlbmd0aCwgdGhpcy5vcHRpb25zUGVyUGFnZSk7XG5cbiAgICAvLyBQcmludCBwcm9tcHRcbiAgICB0aGlzLm91dHB1dFRleHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLFxuICAgICAgY29sb3IuYm9sZCh0aGlzLm1zZyksXG4gICAgICBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLFxuICAgICAgdGhpcy5kb25lID8gdGhpcy5zZWxlY3Rpb24udGl0bGUgOiB0aGlzLnNlbGVjdGlvbi5kaXNhYmxlZFxuICAgICAgICAgID8gY29sb3IueWVsbG93KHRoaXMud2FybikgOiBjb2xvci5ncmF5KHRoaXMuaGludClcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIC8vIFByaW50IGNob2ljZXNcbiAgICBpZiAoIXRoaXMuZG9uZSkge1xuICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9ICdcXG4nO1xuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmRJbmRleDsgaSsrKSB7XG4gICAgICAgIGxldCB0aXRsZSwgcHJlZml4LCBkZXNjID0gJycsIHYgPSB0aGlzLmNob2ljZXNbaV07XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgdG8gZGlzcGxheSBcIm1vcmUgY2hvaWNlc1wiIGluZGljYXRvcnNcbiAgICAgICAgaWYgKGkgPT09IHN0YXJ0SW5kZXggJiYgc3RhcnRJbmRleCA+IDApIHtcbiAgICAgICAgICBwcmVmaXggPSBmaWd1cmVzLmFycm93VXA7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgdGhpcy5jaG9pY2VzLmxlbmd0aCkge1xuICAgICAgICAgIHByZWZpeCA9IGZpZ3VyZXMuYXJyb3dEb3duO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZWZpeCA9ICcgJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2LmRpc2FibGVkKSB7XG4gICAgICAgICAgdGl0bGUgPSB0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmdyYXkoKS51bmRlcmxpbmUodi50aXRsZSkgOiBjb2xvci5zdHJpa2V0aHJvdWdoKCkuZ3JheSh2LnRpdGxlKTtcbiAgICAgICAgICBwcmVmaXggPSAodGhpcy5jdXJzb3IgPT09IGkgPyBjb2xvci5ib2xkKCkuZ3JheShmaWd1cmVzLnBvaW50ZXIpICsgJyAnIDogJyAgJykgKyBwcmVmaXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGl0bGUgPSB0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodi50aXRsZSkgOiB2LnRpdGxlO1xuICAgICAgICAgIHByZWZpeCA9ICh0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmN5YW4oZmlndXJlcy5wb2ludGVyKSArICcgJyA6ICcgICcpICsgcHJlZml4O1xuICAgICAgICAgIGlmICh2LmRlc2NyaXB0aW9uICYmIHRoaXMuY3Vyc29yID09PSBpKSB7XG4gICAgICAgICAgICBkZXNjID0gYCAtICR7di5kZXNjcmlwdGlvbn1gO1xuICAgICAgICAgICAgaWYgKHByZWZpeC5sZW5ndGggKyB0aXRsZS5sZW5ndGggKyBkZXNjLmxlbmd0aCA+PSB0aGlzLm91dC5jb2x1bW5zXG4gICAgICAgICAgICAgICAgfHwgdi5kZXNjcmlwdGlvbi5zcGxpdCgvXFxyP1xcbi8pLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgZGVzYyA9ICdcXG4nICsgd3JhcCh2LmRlc2NyaXB0aW9uLCB7IG1hcmdpbjogMywgd2lkdGg6IHRoaXMub3V0LmNvbHVtbnMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9IGAke3ByZWZpeH0gJHt0aXRsZX0ke2NvbG9yLmdyYXkoZGVzYyl9XFxuYDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZSh0aGlzLm91dHB1dFRleHQpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2VsZWN0UHJvbXB0O1xuIiwiY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcbmNvbnN0IHsgc3R5bGUsIGNsZWFyIH0gPSByZXF1aXJlKCcuLi91dGlsJyk7XG5jb25zdCB7IGN1cnNvciwgZXJhc2UgfSA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKTtcblxuLyoqXG4gKiBUb2dnbGVQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuaW5pdGlhbD1mYWxzZV0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmFjdGl2ZT0nbm8nXSBBY3RpdmUgbGFiZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbmFjdGl2ZT0nb2ZmJ10gSW5hY3RpdmUgbGFiZWxcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5jbGFzcyBUb2dnbGVQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy52YWx1ZSA9ICEhb3B0cy5pbml0aWFsO1xuICAgIHRoaXMuYWN0aXZlID0gb3B0cy5hY3RpdmUgfHwgJ29uJztcbiAgICB0aGlzLmluYWN0aXZlID0gb3B0cy5pbmFjdGl2ZSB8fCAnb2ZmJztcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLmluaXRpYWxWYWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgaWYgKHRoaXMudmFsdWUgPT09IGZhbHNlKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBhY3RpdmF0ZSgpIHtcbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gdHJ1ZSkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gIH1cbiAgbGVmdCgpIHtcbiAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgfVxuICByaWdodCgpIHtcbiAgICB0aGlzLmFjdGl2YXRlKCk7XG4gIH1cbiAgZG93bigpIHtcbiAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgfVxuICB1cCgpIHtcbiAgICB0aGlzLmFjdGl2YXRlKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYyA9PT0gJyAnKSB7XG4gICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWU7XG4gICAgfSBlbHNlIGlmIChjID09PSAnMScpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoYyA9PT0gJzAnKSB7XG4gICAgICB0aGlzLnZhbHVlID0gZmFsc2U7XG4gICAgfSBlbHNlIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7XG4gICAgZWxzZSB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICBzdXBlci5yZW5kZXIoKTtcblxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtcbiAgICAgIHN0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksXG4gICAgICBjb2xvci5ib2xkKHRoaXMubXNnKSxcbiAgICAgIHN0eWxlLmRlbGltaXRlcih0aGlzLmRvbmUpLFxuICAgICAgdGhpcy52YWx1ZSA/IHRoaXMuaW5hY3RpdmUgOiBjb2xvci5jeWFuKCkudW5kZXJsaW5lKHRoaXMuaW5hY3RpdmUpLFxuICAgICAgY29sb3IuZ3JheSgnLycpLFxuICAgICAgdGhpcy52YWx1ZSA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodGhpcy5hY3RpdmUpIDogdGhpcy5hY3RpdmVcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9nZ2xlUHJvbXB0O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jbGFzcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKHt0b2tlbiwgZGF0ZSwgcGFydHMsIGxvY2FsZXN9KSB7XG4gICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIHRoaXMuZGF0ZSA9IGRhdGUgfHwgbmV3IERhdGUoKTtcbiAgICB0aGlzLnBhcnRzID0gcGFydHMgfHwgW3RoaXNdO1xuICAgIHRoaXMubG9jYWxlcyA9IGxvY2FsZXMgfHwge307XG4gIH1cblxuICB1cCgpIHt9XG5cbiAgZG93bigpIHt9XG5cbiAgbmV4dCgpIHtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gdGhpcy5wYXJ0cy5pbmRleE9mKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnBhcnRzLmZpbmQoKHBhcnQsIGlkeCkgPT4gaWR4ID4gY3VycmVudElkeCAmJiBwYXJ0IGluc3RhbmNlb2YgRGF0ZVBhcnQpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7fVxuXG4gIHByZXYoKSB7XG4gICAgbGV0IHBhcnRzID0gW10uY29uY2F0KHRoaXMucGFydHMpLnJldmVyc2UoKTtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gcGFydHMuaW5kZXhPZih0aGlzKTtcbiAgICByZXR1cm4gcGFydHMuZmluZCgocGFydCwgaWR4KSA9PiBpZHggPiBjdXJyZW50SWR4ICYmIHBhcnQgaW5zdGFuY2VvZiBEYXRlUGFydCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuZGF0ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEYXRlUGFydDtcblxuXG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jbGFzcyBNZXJpZGllbSBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldEhvdXJzKCh0aGlzLmRhdGUuZ2V0SG91cnMoKSArIDEyKSAlIDI0KTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgdGhpcy51cCgpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IG1lcmlkaWVtID0gdGhpcy5kYXRlLmdldEhvdXJzKCkgPiAxMiA/ICdwbScgOiAnYW0nO1xuICAgIHJldHVybiAvXFxBLy50ZXN0KHRoaXMudG9rZW4pID8gbWVyaWRpZW0udG9VcHBlckNhc2UoKSA6IG1lcmlkaWVtO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWVyaWRpZW07XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jb25zdCBwb3MgPSBuID0+IHtcbiAgbiA9IG4gJSAxMDtcbiAgcmV0dXJuIG4gPT09IDEgPyAnc3QnXG4gICAgICAgOiBuID09PSAyID8gJ25kJ1xuICAgICAgIDogbiA9PT0gMyA/ICdyZCdcbiAgICAgICA6ICd0aCc7XG59XG5cbmNsYXNzIERheSBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldERhdGUodGhpcy5kYXRlLmdldERhdGUoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0RGF0ZSh0aGlzLmRhdGUuZ2V0RGF0ZSgpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0RGF0ZShwYXJzZUludCh2YWwuc3Vic3RyKC0yKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IGRhdGUgPSB0aGlzLmRhdGUuZ2V0RGF0ZSgpO1xuICAgIGxldCBkYXkgPSB0aGlzLmRhdGUuZ2V0RGF5KCk7XG4gICAgcmV0dXJuIHRoaXMudG9rZW4gPT09ICdERCcgPyBTdHJpbmcoZGF0ZSkucGFkU3RhcnQoMiwgJzAnKVxuICAgICAgICAgOiB0aGlzLnRva2VuID09PSAnRG8nID8gZGF0ZSArIHBvcyhkYXRlKVxuICAgICAgICAgOiB0aGlzLnRva2VuID09PSAnZCcgPyBkYXkgKyAxXG4gICAgICAgICA6IHRoaXMudG9rZW4gPT09ICdkZGQnID8gdGhpcy5sb2NhbGVzLndlZWtkYXlzU2hvcnRbZGF5XVxuICAgICAgICAgOiB0aGlzLnRva2VuID09PSAnZGRkZCcgPyB0aGlzLmxvY2FsZXMud2Vla2RheXNbZGF5XVxuICAgICAgICAgOiBkYXRlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGF5O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgSG91cnMgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRIb3Vycyh0aGlzLmRhdGUuZ2V0SG91cnMoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0SG91cnModGhpcy5kYXRlLmdldEhvdXJzKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHRoaXMuZGF0ZS5zZXRIb3VycyhwYXJzZUludCh2YWwuc3Vic3RyKC0yKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IGhvdXJzID0gdGhpcy5kYXRlLmdldEhvdXJzKCk7XG4gICAgaWYgKC9oLy50ZXN0KHRoaXMudG9rZW4pKVxuICAgICAgaG91cnMgPSAoaG91cnMgJSAxMikgfHwgMTI7XG4gICAgcmV0dXJuIHRoaXMudG9rZW4ubGVuZ3RoID4gMSA/IFN0cmluZyhob3VycykucGFkU3RhcnQoMiwgJzAnKSA6IGhvdXJzO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gSG91cnM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jbGFzcyBNaWxsaXNlY29uZHMgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlLmdldE1pbGxpc2Vjb25kcygpICsgMSk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlLmdldE1pbGxpc2Vjb25kcygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWlsbGlzZWNvbmRzKHBhcnNlSW50KHZhbC5zdWJzdHIoLSh0aGlzLnRva2VuLmxlbmd0aCkpKSk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSkucGFkU3RhcnQoNCwgJzAnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzdHIoMCwgdGhpcy50b2tlbi5sZW5ndGgpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWlsbGlzZWNvbmRzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgTWludXRlcyBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldE1pbnV0ZXModGhpcy5kYXRlLmdldE1pbnV0ZXMoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWludXRlcyh0aGlzLmRhdGUuZ2V0TWludXRlcygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWludXRlcyhwYXJzZUludCh2YWwuc3Vic3RyKC0yKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IG0gPSB0aGlzLmRhdGUuZ2V0TWludXRlcygpO1xuICAgIHJldHVybiB0aGlzLnRva2VuLmxlbmd0aCA+IDEgPyBTdHJpbmcobSkucGFkU3RhcnQoMiwgJzAnKSA6IG07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNaW51dGVzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgTW9udGggZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNb250aCh0aGlzLmRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0TW9udGgodGhpcy5kYXRlLmdldE1vbnRoKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHZhbCA9IHBhcnNlSW50KHZhbC5zdWJzdHIoLTIpKSAtIDE7XG4gICAgdGhpcy5kYXRlLnNldE1vbnRoKHZhbCA8IDAgPyAwIDogdmFsKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBtb250aCA9IHRoaXMuZGF0ZS5nZXRNb250aCgpO1xuICAgIGxldCB0bCA9IHRoaXMudG9rZW4ubGVuZ3RoO1xuICAgIHJldHVybiB0bCA9PT0gMiA/IFN0cmluZyhtb250aCArIDEpLnBhZFN0YXJ0KDIsICcwJylcbiAgICAgICAgICAgOiB0bCA9PT0gMyA/IHRoaXMubG9jYWxlcy5tb250aHNTaG9ydFttb250aF1cbiAgICAgICAgICAgICA6IHRsID09PSA0ID8gdGhpcy5sb2NhbGVzLm1vbnRoc1ttb250aF1cbiAgICAgICAgICAgICAgIDogU3RyaW5nKG1vbnRoICsgMSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNb250aDtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgRGF0ZVBhcnQgPSByZXF1aXJlKCcuL2RhdGVwYXJ0Jyk7XG5cbmNsYXNzIFNlY29uZHMgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRTZWNvbmRzKHRoaXMuZGF0ZS5nZXRTZWNvbmRzKCkgKyAxKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgdGhpcy5kYXRlLnNldFNlY29uZHModGhpcy5kYXRlLmdldFNlY29uZHMoKSAtIDEpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7XG4gICAgdGhpcy5kYXRlLnNldFNlY29uZHMocGFyc2VJbnQodmFsLnN1YnN0cigtMikpKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBzID0gdGhpcy5kYXRlLmdldFNlY29uZHMoKTtcbiAgICByZXR1cm4gdGhpcy50b2tlbi5sZW5ndGggPiAxID8gU3RyaW5nKHMpLnBhZFN0YXJ0KDIsICcwJykgOiBzO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2Vjb25kcztcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgRGF0ZVBhcnQgPSByZXF1aXJlKCcuL2RhdGVwYXJ0Jyk7XG5cbmNsYXNzIFllYXIgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRGdWxsWWVhcih0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0RnVsbFllYXIodGhpcy5kYXRlLmdldEZ1bGxZZWFyKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHRoaXMuZGF0ZS5zZXRGdWxsWWVhcih2YWwuc3Vic3RyKC00KSk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICBsZXQgeWVhciA9IFN0cmluZyh0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSkucGFkU3RhcnQoNCwgJzAnKTtcbiAgICByZXR1cm4gdGhpcy50b2tlbi5sZW5ndGggPT09IDIgPyB5ZWFyLnN1YnN0cigtMikgOiB5ZWFyO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gWWVhcjtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIERhdGVQYXJ0OiByZXF1aXJlKCcuL2RhdGVwYXJ0JyksXG4gIE1lcmlkaWVtOiByZXF1aXJlKCcuL21lcmlkaWVtJyksXG4gIERheTogcmVxdWlyZSgnLi9kYXknKSxcbiAgSG91cnM6IHJlcXVpcmUoJy4vaG91cnMnKSxcbiAgTWlsbGlzZWNvbmRzOiByZXF1aXJlKCcuL21pbGxpc2Vjb25kcycpLFxuICBNaW51dGVzOiByZXF1aXJlKCcuL21pbnV0ZXMnKSxcbiAgTW9udGg6IHJlcXVpcmUoJy4vbW9udGgnKSxcbiAgU2Vjb25kczogcmVxdWlyZSgnLi9zZWNvbmRzJyksXG4gIFllYXI6IHJlcXVpcmUoJy4veWVhcicpLFxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5jb25zdCBQcm9tcHQgPSByZXF1aXJlKCcuL3Byb21wdCcpO1xuY29uc3QgeyBzdHlsZSwgY2xlYXIsIGZpZ3VyZXMgfSA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcbmNvbnN0IHsgZXJhc2UsIGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuY29uc3QgeyBEYXRlUGFydCwgTWVyaWRpZW0sIERheSwgSG91cnMsIE1pbGxpc2Vjb25kcywgTWludXRlcywgTW9udGgsIFNlY29uZHMsIFllYXIgfSA9IHJlcXVpcmUoJy4uL2RhdGVwYXJ0cycpO1xuXG5jb25zdCByZWdleCA9IC9cXFxcKC4pfFwiKCg/OlxcXFxbXCJcXFxcXXxbXlwiXSkrKVwifChEW0RvXT98ZHszLDR9fGQpfChNezEsNH0pfChZWSg/OllZKT8pfChbYUFdKXwoW0hoXXsxLDJ9KXwobXsxLDJ9KXwoc3sxLDJ9KXwoU3sxLDR9KXwuL2c7XG5jb25zdCByZWdleEdyb3VwcyA9IHtcbiAgMTogKHt0b2tlbn0pID0+IHRva2VuLnJlcGxhY2UoL1xcXFwoLikvZywgJyQxJyksXG4gIDI6IChvcHRzKSA9PiBuZXcgRGF5KG9wdHMpLCAvLyBEYXkgLy8gVE9ET1xuICAzOiAob3B0cykgPT4gbmV3IE1vbnRoKG9wdHMpLCAvLyBNb250aFxuICA0OiAob3B0cykgPT4gbmV3IFllYXIob3B0cyksIC8vIFllYXJcbiAgNTogKG9wdHMpID0+IG5ldyBNZXJpZGllbShvcHRzKSwgLy8gQU0vUE0gLy8gVE9ETyAoc3BlY2lhbClcbiAgNjogKG9wdHMpID0+IG5ldyBIb3VycyhvcHRzKSwgLy8gSG91cnNcbiAgNzogKG9wdHMpID0+IG5ldyBNaW51dGVzKG9wdHMpLCAvLyBNaW51dGVzXG4gIDg6IChvcHRzKSA9PiBuZXcgU2Vjb25kcyhvcHRzKSwgLy8gU2Vjb25kc1xuICA5OiAob3B0cykgPT4gbmV3IE1pbGxpc2Vjb25kcyhvcHRzKSwgLy8gRnJhY3Rpb25hbCBzZWNvbmRzXG59XG5cbmNvbnN0IGRmbHRMb2NhbGVzID0ge1xuICBtb250aHM6ICdKYW51YXJ5LEZlYnJ1YXJ5LE1hcmNoLEFwcmlsLE1heSxKdW5lLEp1bHksQXVndXN0LFNlcHRlbWJlcixPY3RvYmVyLE5vdmVtYmVyLERlY2VtYmVyJy5zcGxpdCgnLCcpLFxuICBtb250aHNTaG9ydDogJ0phbixGZWIsTWFyLEFwcixNYXksSnVuLEp1bCxBdWcsU2VwLE9jdCxOb3YsRGVjJy5zcGxpdCgnLCcpLFxuICB3ZWVrZGF5czogJ1N1bmRheSxNb25kYXksVHVlc2RheSxXZWRuZXNkYXksVGh1cnNkYXksRnJpZGF5LFNhdHVyZGF5Jy5zcGxpdCgnLCcpLFxuICB3ZWVrZGF5c1Nob3J0OiAnU3VuLE1vbixUdWUsV2VkLFRodSxGcmksU2F0Jy5zcGxpdCgnLCcpXG59XG5cblxuLyoqXG4gKiBEYXRlUHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5pdGlhbF0gSW5kZXggb2YgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm1hc2tdIFRoZSBmb3JtYXQgbWFza1xuICogQHBhcmFtIHtvYmplY3R9IFtvcHRzLmxvY2FsZXNdIFRoZSBkYXRlIGxvY2FsZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5lcnJvcl0gVGhlIGVycm9yIG1lc3NhZ2Ugc2hvd24gb24gaW52YWxpZCB2YWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBzdWJtaXR0ZWQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5jbGFzcyBEYXRlUHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMubXNnID0gb3B0cy5tZXNzYWdlO1xuICAgIHRoaXMuY3Vyc29yID0gMDtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5sb2NhbGVzID0gT2JqZWN0LmFzc2lnbihkZmx0TG9jYWxlcywgb3B0cy5sb2NhbGVzKTtcbiAgICB0aGlzLl9kYXRlID0gb3B0cy5pbml0aWFsIHx8IG5ldyBEYXRlKCk7XG4gICAgdGhpcy5lcnJvck1zZyA9IG9wdHMuZXJyb3IgfHwgJ1BsZWFzZSBFbnRlciBBIFZhbGlkIFZhbHVlJztcbiAgICB0aGlzLnZhbGlkYXRvciA9IG9wdHMudmFsaWRhdGUgfHwgKCgpID0+IHRydWUpO1xuICAgIHRoaXMubWFzayA9IG9wdHMubWFzayB8fCAnWVlZWS1NTS1ERCBISDptbTpzcyc7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGVcbiAgfVxuXG4gIGdldCBkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRlO1xuICB9XG5cbiAgc2V0IGRhdGUoZGF0ZSkge1xuICAgIGlmIChkYXRlKSB0aGlzLl9kYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkpO1xuICB9XG5cbiAgc2V0IG1hc2sobWFzaykge1xuICAgIGxldCByZXN1bHQ7XG4gICAgdGhpcy5wYXJ0cyA9IFtdO1xuICAgIHdoaWxlKHJlc3VsdCA9IHJlZ2V4LmV4ZWMobWFzaykpIHtcbiAgICAgIGxldCBtYXRjaCA9IHJlc3VsdC5zaGlmdCgpO1xuICAgICAgbGV0IGlkeCA9IHJlc3VsdC5maW5kSW5kZXgoZ3IgPT4gZ3IgIT0gbnVsbCk7XG4gICAgICB0aGlzLnBhcnRzLnB1c2goaWR4IGluIHJlZ2V4R3JvdXBzXG4gICAgICAgID8gcmVnZXhHcm91cHNbaWR4XSh7IHRva2VuOiByZXN1bHRbaWR4XSB8fCBtYXRjaCwgZGF0ZTogdGhpcy5kYXRlLCBwYXJ0czogdGhpcy5wYXJ0cywgbG9jYWxlczogdGhpcy5sb2NhbGVzIH0pXG4gICAgICAgIDogcmVzdWx0W2lkeF0gfHwgbWF0Y2gpO1xuICAgIH1cblxuICAgIGxldCBwYXJ0cyA9IHRoaXMucGFydHMucmVkdWNlKChhcnIsIGkpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgaSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIGFyclthcnIubGVuZ3RoIC0gMV0gPT09ICdzdHJpbmcnKVxuICAgICAgICBhcnJbYXJyLmxlbmd0aCAtIDFdICs9IGk7XG4gICAgICBlbHNlIGFyci5wdXNoKGkpO1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9LCBbXSk7XG5cbiAgICB0aGlzLnBhcnRzLnNwbGljZSgwKTtcbiAgICB0aGlzLnBhcnRzLnB1c2goLi4ucGFydHMpO1xuICAgIHRoaXMucmVzZXQoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIHRoaXMudHlwZWQgPSAnJztcbiAgICB0aGlzLmN1cnNvciA9IG47XG4gICAgdGhpcy5maXJlKCk7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5wYXJ0cy5maW5kSW5kZXgocCA9PiBwIGluc3RhbmNlb2YgRGF0ZVBhcnQpKTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZSgpIHtcbiAgICBsZXQgdmFsaWQgPSBhd2FpdCB0aGlzLnZhbGlkYXRvcih0aGlzLnZhbHVlKTtcbiAgICBpZiAodHlwZW9mIHZhbGlkID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5lcnJvck1zZyA9IHZhbGlkO1xuICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5lcnJvciA9ICF2YWxpZDtcbiAgfVxuXG4gIGFzeW5jIHN1Ym1pdCgpIHtcbiAgICBhd2FpdCB0aGlzLnZhbGlkYXRlKCk7XG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIHRoaXMuY29sb3IgPSAncmVkJztcbiAgICAgIHRoaXMuZmlyZSgpO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICB1cCgpIHtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0udXAoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0uZG93bigpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIGxldCBwcmV2ID0gdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0ucHJldigpO1xuICAgIGlmIChwcmV2ID09IG51bGwpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5wYXJ0cy5pbmRleE9mKHByZXYpKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmlnaHQoKSB7XG4gICAgbGV0IG5leHQgPSB0aGlzLnBhcnRzW3RoaXMuY3Vyc29yXS5uZXh0KCk7XG4gICAgaWYgKG5leHQgPT0gbnVsbCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcih0aGlzLnBhcnRzLmluZGV4T2YobmV4dCkpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIGxldCBuZXh0ID0gdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0ubmV4dCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcihuZXh0XG4gICAgICA/IHRoaXMucGFydHMuaW5kZXhPZihuZXh0KVxuICAgICAgOiB0aGlzLnBhcnRzLmZpbmRJbmRleCgocGFydCkgPT4gcGFydCBpbnN0YW5jZW9mIERhdGVQYXJ0KSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIF8oYykge1xuICAgIGlmICgvXFxkLy50ZXN0KGMpKSB7XG4gICAgICB0aGlzLnR5cGVkICs9IGM7XG4gICAgICB0aGlzLnBhcnRzW3RoaXMuY3Vyc29yXS5zZXRUbyh0aGlzLnR5cGVkKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7XG4gICAgZWxzZSB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICBzdXBlci5yZW5kZXIoKTtcblxuICAgIC8vIFByaW50IHByb21wdFxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtcbiAgICAgIHN0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksXG4gICAgICBjb2xvci5ib2xkKHRoaXMubXNnKSxcbiAgICAgIHN0eWxlLmRlbGltaXRlcihmYWxzZSksXG4gICAgICB0aGlzLnBhcnRzLnJlZHVjZSgoYXJyLCBwLCBpZHgpID0+IGFyci5jb25jYXQoaWR4ID09PSB0aGlzLmN1cnNvciAmJiAhdGhpcy5kb25lID8gY29sb3IuY3lhbigpLnVuZGVybGluZShwLnRvU3RyaW5nKCkpIDogcCksIFtdKVxuICAgICAgICAgIC5qb2luKCcnKVxuICAgIF0uam9pbignICcpO1xuXG4gICAgLy8gUHJpbnQgZXJyb3JcbiAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9IHRoaXMuZXJyb3JNc2cuc3BsaXQoJ1xcbicpLnJlZHVjZShcbiAgICAgICAgICAoYSwgbCwgaSkgPT4gYSArIGBcXG4ke2kgPyBgIGAgOiBmaWd1cmVzLnBvaW50ZXJTbWFsbH0gJHtjb2xvci5yZWQoKS5pdGFsaWMobCl9YCwgYGApO1xuICAgIH1cblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGF0ZVByb21wdDtcbiIsImNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcbmNvbnN0IFByb21wdCA9IHJlcXVpcmUoJy4vcHJvbXB0Jyk7XG5jb25zdCB7IGN1cnNvciwgZXJhc2UgfSA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKTtcbmNvbnN0IHsgc3R5bGUsIGZpZ3VyZXMsIGNsZWFyLCBsaW5lcyB9ID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xuXG5jb25zdCBpc051bWJlciA9IC9bMC05XS87XG5jb25zdCBpc0RlZiA9IGFueSA9PiBhbnkgIT09IHVuZGVmaW5lZDtcbmNvbnN0IHJvdW5kID0gKG51bWJlciwgcHJlY2lzaW9uKSA9PiB7XG4gIGxldCBmYWN0b3IgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uKTtcbiAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyICogZmFjdG9yKSAvIGZhY3Rvcjtcbn1cblxuLyoqXG4gKiBOdW1iZXJQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5zdHlsZT0nZGVmYXVsdCddIFJlbmRlciBzdHlsZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmluaXRpYWxdIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXg9K0luZmluaXR5XSBNYXggdmFsdWVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5taW49LUluZmluaXR5XSBNaW4gdmFsdWVcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuZmxvYXQ9ZmFsc2VdIFBhcnNlIGlucHV0IGFzIGZsb2F0c1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnJvdW5kPTJdIFJvdW5kIGZsb2F0cyB0byB4IGRlY2ltYWxzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5jcmVtZW50PTFdIE51bWJlciB0byBpbmNyZW1lbnQgYnkgd2hlbiB1c2luZyBhcnJvdy1rZXlzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy52YWxpZGF0ZV0gVmFsaWRhdGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmVycm9yXSBUaGUgaW52YWxpZCBlcnJvciBsYWJlbFxuICovXG5jbGFzcyBOdW1iZXJQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSBzdHlsZS5yZW5kZXIob3B0cy5zdHlsZSk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy5pbml0aWFsID0gaXNEZWYob3B0cy5pbml0aWFsKSA/IG9wdHMuaW5pdGlhbCA6ICcnO1xuICAgIHRoaXMuZmxvYXQgPSAhIW9wdHMuZmxvYXQ7XG4gICAgdGhpcy5yb3VuZCA9IG9wdHMucm91bmQgfHwgMjtcbiAgICB0aGlzLmluYyA9IG9wdHMuaW5jcmVtZW50IHx8IDE7XG4gICAgdGhpcy5taW4gPSBpc0RlZihvcHRzLm1pbikgPyBvcHRzLm1pbiA6IC1JbmZpbml0eTtcbiAgICB0aGlzLm1heCA9IGlzRGVmKG9wdHMubWF4KSA/IG9wdHMubWF4IDogSW5maW5pdHk7XG4gICAgdGhpcy5lcnJvck1zZyA9IG9wdHMuZXJyb3IgfHwgYFBsZWFzZSBFbnRlciBBIFZhbGlkIFZhbHVlYDtcbiAgICB0aGlzLnZhbGlkYXRvciA9IG9wdHMudmFsaWRhdGUgfHwgKCgpID0+IHRydWUpO1xuICAgIHRoaXMuY29sb3IgPSBgY3lhbmA7XG4gICAgdGhpcy52YWx1ZSA9IGBgO1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICB0aGlzLmxhc3RIaXQgPSAwO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgdmFsdWUodikge1xuICAgIGlmICghdiAmJiB2ICE9PSAwKSB7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVuZGVyZWQgPSBjb2xvci5ncmF5KHRoaXMudHJhbnNmb3JtLnJlbmRlcihgJHt0aGlzLmluaXRpYWx9YCkpO1xuICAgICAgdGhpcy5fdmFsdWUgPSBgYDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXJlZCA9IHRoaXMudHJhbnNmb3JtLnJlbmRlcihgJHtyb3VuZCh2LCB0aGlzLnJvdW5kKX1gKTtcbiAgICAgIHRoaXMuX3ZhbHVlID0gcm91bmQodiwgdGhpcy5yb3VuZCk7XG4gICAgfVxuICAgIHRoaXMuZmlyZSgpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHBhcnNlKHgpIHtcbiAgICByZXR1cm4gdGhpcy5mbG9hdCA/IHBhcnNlRmxvYXQoeCkgOiBwYXJzZUludCh4KTtcbiAgfVxuXG4gIHZhbGlkKGMpIHtcbiAgICByZXR1cm4gYyA9PT0gYC1gIHx8IGMgPT09IGAuYCAmJiB0aGlzLmZsb2F0IHx8IGlzTnVtYmVyLnRlc3QoYylcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGV4aXQoKSB7XG4gICAgdGhpcy5hYm9ydCgpO1xuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgbGV0IHggPSB0aGlzLnZhbHVlO1xuICAgIHRoaXMudmFsdWUgPSB4ICE9PSBgYCA/IHggOiB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZShgXFxuYCk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGUoKSB7XG4gICAgbGV0IHZhbGlkID0gYXdhaXQgdGhpcy52YWxpZGF0b3IodGhpcy52YWx1ZSk7XG4gICAgaWYgKHR5cGVvZiB2YWxpZCA9PT0gYHN0cmluZ2ApIHtcbiAgICAgIHRoaXMuZXJyb3JNc2cgPSB2YWxpZDtcbiAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuZXJyb3IgPSAhdmFsaWQ7XG4gIH1cblxuICBhc3luYyBzdWJtaXQoKSB7XG4gICAgYXdhaXQgdGhpcy52YWxpZGF0ZSgpO1xuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aGlzLmNvbG9yID0gYHJlZGA7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB4ID0gdGhpcy52YWx1ZTtcbiAgICB0aGlzLnZhbHVlID0geCAhPT0gYGAgPyB4IDogdGhpcy5pbml0aWFsO1xuICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5lcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoYFxcbmApO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICBpZih0aGlzLnZhbHVlID09PSAnJykge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluIC0gdGhpcy5pbmM7XG4gICAgfVxuICAgIGlmICh0aGlzLnZhbHVlID49IHRoaXMubWF4KSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSArPSB0aGlzLmluYztcbiAgICB0aGlzLmNvbG9yID0gYGN5YW5gO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICBpZih0aGlzLnZhbHVlID09PSAnJykge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluICsgdGhpcy5pbmM7XG4gICAgfVxuICAgIGlmICh0aGlzLnZhbHVlIDw9IHRoaXMubWluKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSAtPSB0aGlzLmluYztcbiAgICB0aGlzLmNvbG9yID0gYGN5YW5gO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgbGV0IHZhbCA9IHRoaXMudmFsdWUudG9TdHJpbmcoKTtcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnBhcnNlKCh2YWwgPSB2YWwuc2xpY2UoMCwgLTEpKSkgfHwgYGA7XG4gICAgaWYgKHRoaXMudmFsdWUgIT09ICcnICYmIHRoaXMudmFsdWUgPCB0aGlzLm1pbikge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluO1xuICAgIH1cbiAgICB0aGlzLmNvbG9yID0gYGN5YW5gO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIF8oYywga2V5KSB7XG4gICAgaWYgKCF0aGlzLnZhbGlkKGMpKSByZXR1cm4gdGhpcy5iZWxsKCk7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmIChub3cgLSB0aGlzLmxhc3RIaXQgPiAxMDAwKSB0aGlzLnR5cGVkID0gYGA7IC8vIDFzIGVsYXBzZWRcbiAgICB0aGlzLnR5cGVkICs9IGM7XG4gICAgdGhpcy5sYXN0SGl0ID0gbm93O1xuICAgIHRoaXMuY29sb3IgPSBgY3lhbmA7XG5cbiAgICBpZiAoYyA9PT0gYC5gKSByZXR1cm4gdGhpcy5maXJlKCk7XG5cbiAgICB0aGlzLnZhbHVlID0gTWF0aC5taW4odGhpcy5wYXJzZSh0aGlzLnR5cGVkKSwgdGhpcy5tYXgpO1xuICAgIGlmICh0aGlzLnZhbHVlID4gdGhpcy5tYXgpIHRoaXMudmFsdWUgPSB0aGlzLm1heDtcbiAgICBpZiAodGhpcy52YWx1ZSA8IHRoaXMubWluKSB0aGlzLnZhbHVlID0gdGhpcy5taW47XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuZmlyc3RSZW5kZXIpIHtcbiAgICAgIGlmICh0aGlzLm91dHB1dEVycm9yKVxuICAgICAgICB0aGlzLm91dC53cml0ZShjdXJzb3IuZG93bihsaW5lcyh0aGlzLm91dHB1dEVycm9yLCB0aGlzLm91dC5jb2x1bW5zKSAtIDEpICsgY2xlYXIodGhpcy5vdXRwdXRFcnJvciwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgICAgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgfVxuICAgIHN1cGVyLnJlbmRlcigpO1xuICAgIHRoaXMub3V0cHV0RXJyb3IgPSAnJztcblxuICAgIC8vIFByaW50IHByb21wdFxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtcbiAgICAgIHN0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksXG4gICAgICBjb2xvci5ib2xkKHRoaXMubXNnKSxcbiAgICAgIHN0eWxlLmRlbGltaXRlcih0aGlzLmRvbmUpLFxuICAgICAgIXRoaXMuZG9uZSB8fCAoIXRoaXMuZG9uZSAmJiAhdGhpcy5wbGFjZWhvbGRlcilcbiAgICAgICAgICA/IGNvbG9yW3RoaXMuY29sb3JdKCkudW5kZXJsaW5lKHRoaXMucmVuZGVyZWQpIDogdGhpcy5yZW5kZXJlZFxuICAgIF0uam9pbihgIGApO1xuXG4gICAgLy8gUHJpbnQgZXJyb3JcbiAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgdGhpcy5vdXRwdXRFcnJvciArPSB0aGlzLmVycm9yTXNnLnNwbGl0KGBcXG5gKVxuICAgICAgICAgIC5yZWR1Y2UoKGEsIGwsIGkpID0+IGEgKyBgXFxuJHtpID8gYCBgIDogZmlndXJlcy5wb2ludGVyU21hbGx9ICR7Y29sb3IucmVkKCkuaXRhbGljKGwpfWAsIGBgKTtcbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZShlcmFzZS5saW5lICsgY3Vyc29yLnRvKDApICsgdGhpcy5vdXRwdXRUZXh0ICsgY3Vyc29yLnNhdmUgKyB0aGlzLm91dHB1dEVycm9yICsgY3Vyc29yLnJlc3RvcmUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyUHJvbXB0O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5jb25zdCB7IGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcbmNvbnN0IHsgY2xlYXIsIGZpZ3VyZXMsIHN0eWxlLCB3cmFwLCBlbnRyaWVzVG9EaXNwbGF5IH0gPSByZXF1aXJlKCcuLi91dGlsJyk7XG5cbi8qKlxuICogTXVsdGlzZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLndhcm5dIEhpbnQgc2hvd24gZm9yIGRpc2FibGVkIGNob2ljZXNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXhdIE1heCBjaG9pY2VzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm9wdGlvbnNQZXJQYWdlPTEwXSBNYXggb3B0aW9ucyB0byBkaXNwbGF5IGF0IG9uY2VcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5jbGFzcyBNdWx0aXNlbGVjdFByb21wdCBleHRlbmRzIFByb21wdCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmN1cnNvciA9IG9wdHMuY3Vyc29yIHx8IDA7XG4gICAgdGhpcy5zY3JvbGxJbmRleCA9IG9wdHMuY3Vyc29yIHx8IDA7XG4gICAgdGhpcy5oaW50ID0gb3B0cy5oaW50IHx8ICcnO1xuICAgIHRoaXMud2FybiA9IG9wdHMud2FybiB8fCAnLSBUaGlzIG9wdGlvbiBpcyBkaXNhYmxlZCAtJztcbiAgICB0aGlzLm1pblNlbGVjdGVkID0gb3B0cy5taW47XG4gICAgdGhpcy5zaG93TWluRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLm1heENob2ljZXMgPSBvcHRzLm1heDtcbiAgICB0aGlzLmluc3RydWN0aW9ucyA9IG9wdHMuaW5zdHJ1Y3Rpb25zO1xuICAgIHRoaXMub3B0aW9uc1BlclBhZ2UgPSBvcHRzLm9wdGlvbnNQZXJQYWdlIHx8IDEwO1xuICAgIHRoaXMudmFsdWUgPSBvcHRzLmNob2ljZXMubWFwKChjaCwgaWR4KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNoID09PSAnc3RyaW5nJylcbiAgICAgICAgY2ggPSB7dGl0bGU6IGNoLCB2YWx1ZTogaWR4fTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBjaCAmJiAoY2gudGl0bGUgfHwgY2gudmFsdWUgfHwgY2gpLFxuICAgICAgICBkZXNjcmlwdGlvbjogY2ggJiYgY2guZGVzY3JpcHRpb24sXG4gICAgICAgIHZhbHVlOiBjaCAmJiAoY2gudmFsdWUgPT09IHVuZGVmaW5lZCA/IGlkeCA6IGNoLnZhbHVlKSxcbiAgICAgICAgc2VsZWN0ZWQ6IGNoICYmIGNoLnNlbGVjdGVkLFxuICAgICAgICBkaXNhYmxlZDogY2ggJiYgY2guZGlzYWJsZWRcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICBpZiAoIW9wdHMub3ZlcnJpZGVSZW5kZXIpIHtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy52YWx1ZS5tYXAodiA9PiAhdi5zZWxlY3RlZCk7XG4gICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZS5maWx0ZXIodiA9PiB2LnNlbGVjdGVkKTtcbiAgfVxuXG4gIGV4aXQoKSB7XG4gICAgdGhpcy5hYm9ydCgpO1xuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBzdWJtaXQoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnZhbHVlXG4gICAgICAuZmlsdGVyKGUgPT4gZS5zZWxlY3RlZCk7XG4gICAgaWYgKHRoaXMubWluU2VsZWN0ZWQgJiYgc2VsZWN0ZWQubGVuZ3RoIDwgdGhpcy5taW5TZWxlY3RlZCkge1xuICAgICAgdGhpcy5zaG93TWluRXJyb3IgPSB0cnVlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5maXJlKCk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZpcnN0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gMDtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbGFzdCgpIHtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMudmFsdWUubGVuZ3RoIC0gMTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG4gIG5leHQoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSAodGhpcy5jdXJzb3IgKyAxKSAlIHRoaXMudmFsdWUubGVuZ3RoO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICB1cCgpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IgPT09IDApIHtcbiAgICAgIHRoaXMuY3Vyc29yID0gdGhpcy52YWx1ZS5sZW5ndGggLSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvci0tO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IgPT09IHRoaXMudmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvcisrO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbGVmdCgpIHtcbiAgICB0aGlzLnZhbHVlW3RoaXMuY3Vyc29yXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByaWdodCgpIHtcbiAgICBpZiAodGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZVt0aGlzLmN1cnNvcl0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBoYW5kbGVTcGFjZVRvZ2dsZSgpIHtcbiAgICBjb25zdCB2ID0gdGhpcy52YWx1ZVt0aGlzLmN1cnNvcl07XG5cbiAgICBpZiAodi5zZWxlY3RlZCkge1xuICAgICAgdi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9IGVsc2UgaWYgKHYuZGlzYWJsZWQgfHwgdGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHYuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVBbGwoKSB7XG4gICAgaWYgKHRoaXMubWF4Q2hvaWNlcyAhPT0gdW5kZWZpbmVkIHx8IHRoaXMudmFsdWVbdGhpcy5jdXJzb3JdLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3U2VsZWN0ZWQgPSAhdGhpcy52YWx1ZVt0aGlzLmN1cnNvcl0uc2VsZWN0ZWQ7XG4gICAgdGhpcy52YWx1ZS5maWx0ZXIodiA9PiAhdi5kaXNhYmxlZCkuZm9yRWFjaCh2ID0+IHYuc2VsZWN0ZWQgPSBuZXdTZWxlY3RlZCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIF8oYywga2V5KSB7XG4gICAgaWYgKGMgPT09ICcgJykge1xuICAgICAgdGhpcy5oYW5kbGVTcGFjZVRvZ2dsZSgpO1xuICAgIH0gZWxzZSBpZiAoYyA9PT0gJ2EnKSB7XG4gICAgICB0aGlzLnRvZ2dsZUFsbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmluc3RydWN0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuaW5zdHJ1Y3Rpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnN0cnVjdGlvbnM7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ1xcbkluc3RydWN0aW9uczpcXG4nXG4gICAgICAgICsgYCAgICAke2ZpZ3VyZXMuYXJyb3dVcH0vJHtmaWd1cmVzLmFycm93RG93bn06IEhpZ2hsaWdodCBvcHRpb25cXG5gXG4gICAgICAgICsgYCAgICAke2ZpZ3VyZXMuYXJyb3dMZWZ0fS8ke2ZpZ3VyZXMuYXJyb3dSaWdodH0vW3NwYWNlXTogVG9nZ2xlIHNlbGVjdGlvblxcbmBcbiAgICAgICAgKyAodGhpcy5tYXhDaG9pY2VzID09PSB1bmRlZmluZWQgPyBgICAgIGE6IFRvZ2dsZSBhbGxcXG5gIDogJycpXG4gICAgICAgICsgYCAgICBlbnRlci9yZXR1cm46IENvbXBsZXRlIGFuc3dlcmA7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlck9wdGlvbihjdXJzb3IsIHYsIGksIGFycm93SW5kaWNhdG9yKSB7XG4gICAgY29uc3QgcHJlZml4ID0gKHYuc2VsZWN0ZWQgPyBjb2xvci5ncmVlbihmaWd1cmVzLnJhZGlvT24pIDogZmlndXJlcy5yYWRpb09mZikgKyAnICcgKyBhcnJvd0luZGljYXRvciArICcgJztcbiAgICBsZXQgdGl0bGUsIGRlc2M7XG5cbiAgICBpZiAodi5kaXNhYmxlZCkge1xuICAgICAgdGl0bGUgPSBjdXJzb3IgPT09IGkgPyBjb2xvci5ncmF5KCkudW5kZXJsaW5lKHYudGl0bGUpIDogY29sb3Iuc3RyaWtldGhyb3VnaCgpLmdyYXkodi50aXRsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpdGxlID0gY3Vyc29yID09PSBpID8gY29sb3IuY3lhbigpLnVuZGVybGluZSh2LnRpdGxlKSA6IHYudGl0bGU7XG4gICAgICBpZiAoY3Vyc29yID09PSBpICYmIHYuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgZGVzYyA9IGAgLSAke3YuZGVzY3JpcHRpb259YDtcbiAgICAgICAgaWYgKHByZWZpeC5sZW5ndGggKyB0aXRsZS5sZW5ndGggKyBkZXNjLmxlbmd0aCA+PSB0aGlzLm91dC5jb2x1bW5zXG4gICAgICAgICAgfHwgdi5kZXNjcmlwdGlvbi5zcGxpdCgvXFxyP1xcbi8pLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBkZXNjID0gJ1xcbicgKyB3cmFwKHYuZGVzY3JpcHRpb24sIHsgbWFyZ2luOiBwcmVmaXgubGVuZ3RoLCB3aWR0aDogdGhpcy5vdXQuY29sdW1ucyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcmVmaXggKyB0aXRsZSArIGNvbG9yLmdyYXkoZGVzYyB8fCAnJyk7XG4gIH1cblxuICAvLyBzaGFyZWQgd2l0aCBhdXRvY29tcGxldGVNdWx0aXNlbGVjdFxuICBwYWdpbmF0ZU9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGNvbG9yLnJlZCgnTm8gbWF0Y2hlcyBmb3IgdGhpcyBxdWVyeS4nKTtcbiAgICB9XG5cbiAgICBsZXQgeyBzdGFydEluZGV4LCBlbmRJbmRleCB9ID0gZW50cmllc1RvRGlzcGxheSh0aGlzLmN1cnNvciwgb3B0aW9ucy5sZW5ndGgsIHRoaXMub3B0aW9uc1BlclBhZ2UpO1xuICAgIGxldCBwcmVmaXgsIHN0eWxlZE9wdGlvbnMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4OyBpIDwgZW5kSW5kZXg7IGkrKykge1xuICAgICAgaWYgKGkgPT09IHN0YXJ0SW5kZXggJiYgc3RhcnRJbmRleCA+IDApIHtcbiAgICAgICAgcHJlZml4ID0gZmlndXJlcy5hcnJvd1VwO1xuICAgICAgfSBlbHNlIGlmIChpID09PSBlbmRJbmRleCAtIDEgJiYgZW5kSW5kZXggPCBvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBwcmVmaXggPSBmaWd1cmVzLmFycm93RG93bjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByZWZpeCA9ICcgJztcbiAgICAgIH1cbiAgICAgIHN0eWxlZE9wdGlvbnMucHVzaCh0aGlzLnJlbmRlck9wdGlvbih0aGlzLmN1cnNvciwgb3B0aW9uc1tpXSwgaSwgcHJlZml4KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICdcXG4nICsgc3R5bGVkT3B0aW9ucy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8vIHNoYXJlZCB3aXRoIGF1dG9jb21sZXRlTXVsdGlzZWxlY3RcbiAgcmVuZGVyT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKCF0aGlzLmRvbmUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRlT3B0aW9ucyhvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcmVuZGVyRG9uZU9ySW5zdHJ1Y3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlXG4gICAgICAgIC5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKVxuICAgICAgICAubWFwKHYgPT4gdi50aXRsZSlcbiAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gW2NvbG9yLmdyYXkodGhpcy5oaW50KSwgdGhpcy5yZW5kZXJJbnN0cnVjdGlvbnMoKV07XG5cbiAgICBpZiAodGhpcy52YWx1ZVt0aGlzLmN1cnNvcl0uZGlzYWJsZWQpIHtcbiAgICAgIG91dHB1dC5wdXNoKGNvbG9yLnllbGxvdyh0aGlzLndhcm4pKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dC5qb2luKCcgJyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtcbiAgICBzdXBlci5yZW5kZXIoKTtcblxuICAgIC8vIHByaW50IHByb21wdFxuICAgIGxldCBwcm9tcHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLFxuICAgICAgY29sb3IuYm9sZCh0aGlzLm1zZyksXG4gICAgICBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLFxuICAgICAgdGhpcy5yZW5kZXJEb25lT3JJbnN0cnVjdGlvbnMoKVxuICAgIF0uam9pbignICcpO1xuICAgIGlmICh0aGlzLnNob3dNaW5FcnJvcikge1xuICAgICAgcHJvbXB0ICs9IGNvbG9yLnJlZChgWW91IG11c3Qgc2VsZWN0IGEgbWluaW11bSBvZiAke3RoaXMubWluU2VsZWN0ZWR9IGNob2ljZXMuYCk7XG4gICAgICB0aGlzLnNob3dNaW5FcnJvciA9IGZhbHNlO1xuICAgIH1cbiAgICBwcm9tcHQgKz0gdGhpcy5yZW5kZXJPcHRpb25zKHRoaXMudmFsdWUpO1xuXG4gICAgdGhpcy5vdXQud3JpdGUodGhpcy5jbGVhciArIHByb21wdCk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKHByb21wdCwgdGhpcy5vdXQuY29sdW1ucyk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNdWx0aXNlbGVjdFByb21wdDtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcbmNvbnN0IHsgZXJhc2UsIGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuY29uc3QgeyBzdHlsZSwgY2xlYXIsIGZpZ3VyZXMsIHdyYXAsIGVudHJpZXNUb0Rpc3BsYXkgfSA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcblxuY29uc3QgZ2V0VmFsID0gKGFyciwgaSkgPT4gYXJyW2ldICYmIChhcnJbaV0udmFsdWUgfHwgYXJyW2ldLnRpdGxlIHx8IGFycltpXSk7XG5jb25zdCBnZXRUaXRsZSA9IChhcnIsIGkpID0+IGFycltpXSAmJiAoYXJyW2ldLnRpdGxlIHx8IGFycltpXS52YWx1ZSB8fCBhcnJbaV0pO1xuY29uc3QgZ2V0SW5kZXggPSAoYXJyLCB2YWxPclRpdGxlKSA9PiB7XG4gIGNvbnN0IGluZGV4ID0gYXJyLmZpbmRJbmRleChlbCA9PiBlbC52YWx1ZSA9PT0gdmFsT3JUaXRsZSB8fCBlbC50aXRsZSA9PT0gdmFsT3JUaXRsZSk7XG4gIHJldHVybiBpbmRleCA+IC0xID8gaW5kZXggOiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFRleHRQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBhdXRvLWNvbXBsZXRlIGNob2ljZXMgb2JqZWN0c1xuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMuc3VnZ2VzdF0gRmlsdGVyIGZ1bmN0aW9uLiBEZWZhdWx0cyB0byBzb3J0IGJ5IHRpdGxlXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMubGltaXQ9MTBdIE1heCBudW1iZXIgb2YgcmVzdWx0cyB0byBzaG93XG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnN0eWxlPSdkZWZhdWx0J10gUmVuZGVyIHN0eWxlXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuZmFsbGJhY2tdIEZhbGxiYWNrIG1lc3NhZ2UgLSBpbml0aWFsIHRvIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbml0aWFsXSBJbmRleCBvZiB0aGUgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5jbGVhckZpcnN0XSBUaGUgZmlyc3QgRVNDQVBFIGtleXByZXNzIHdpbGwgY2xlYXIgdGhlIGlucHV0XG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5ub01hdGNoZXNdIFRoZSBubyBtYXRjaGVzIGZvdW5kIGxhYmVsXG4gKi9cbmNsYXNzIEF1dG9jb21wbGV0ZVByb21wdCBleHRlbmRzIFByb21wdCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLnN1Z2dlc3QgPSBvcHRzLnN1Z2dlc3Q7XG4gICAgdGhpcy5jaG9pY2VzID0gb3B0cy5jaG9pY2VzO1xuICAgIHRoaXMuaW5pdGlhbCA9IHR5cGVvZiBvcHRzLmluaXRpYWwgPT09ICdudW1iZXInXG4gICAgICA/IG9wdHMuaW5pdGlhbFxuICAgICAgOiBnZXRJbmRleChvcHRzLmNob2ljZXMsIG9wdHMuaW5pdGlhbCk7XG4gICAgdGhpcy5zZWxlY3QgPSB0aGlzLmluaXRpYWwgfHwgb3B0cy5jdXJzb3IgfHwgMDtcbiAgICB0aGlzLmkxOG4gPSB7IG5vTWF0Y2hlczogb3B0cy5ub01hdGNoZXMgfHwgJ25vIG1hdGNoZXMgZm91bmQnIH07XG4gICAgdGhpcy5mYWxsYmFjayA9IG9wdHMuZmFsbGJhY2sgfHwgdGhpcy5pbml0aWFsO1xuICAgIHRoaXMuY2xlYXJGaXJzdCA9IG9wdHMuY2xlYXJGaXJzdCB8fCBmYWxzZTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5pbnB1dCA9ICcnO1xuICAgIHRoaXMubGltaXQgPSBvcHRzLmxpbWl0IHx8IDEwO1xuICAgIHRoaXMuY3Vyc29yID0gMDtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHN0eWxlLnJlbmRlcihvcHRzLnN0eWxlKTtcbiAgICB0aGlzLnNjYWxlID0gdGhpcy50cmFuc2Zvcm0uc2NhbGU7XG4gICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuY29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICB0aGlzLmNvbXBsZXRlKHRoaXMucmVuZGVyKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgc2V0IGZhbGxiYWNrKGZiKSB7XG4gICAgdGhpcy5fZmIgPSBOdW1iZXIuaXNTYWZlSW50ZWdlcihwYXJzZUludChmYikpID8gcGFyc2VJbnQoZmIpIDogZmI7XG4gIH1cblxuICBnZXQgZmFsbGJhY2soKSB7XG4gICAgbGV0IGNob2ljZTtcbiAgICBpZiAodHlwZW9mIHRoaXMuX2ZiID09PSAnbnVtYmVyJylcbiAgICAgIGNob2ljZSA9IHRoaXMuY2hvaWNlc1t0aGlzLl9mYl07XG4gICAgZWxzZSBpZiAodHlwZW9mIHRoaXMuX2ZiID09PSAnc3RyaW5nJylcbiAgICAgIGNob2ljZSA9IHsgdGl0bGU6IHRoaXMuX2ZiIH07XG4gICAgcmV0dXJuIGNob2ljZSB8fCB0aGlzLl9mYiB8fCB7IHRpdGxlOiB0aGlzLmkxOG4ubm9NYXRjaGVzIH07XG4gIH1cblxuICBtb3ZlU2VsZWN0KGkpIHtcbiAgICB0aGlzLnNlbGVjdCA9IGk7XG4gICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMClcbiAgICAgIHRoaXMudmFsdWUgPSBnZXRWYWwodGhpcy5zdWdnZXN0aW9ucywgaSk7XG4gICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy5mYWxsYmFjay52YWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgfVxuXG4gIGFzeW5jIGNvbXBsZXRlKGNiKSB7XG4gICAgY29uc3QgcCA9ICh0aGlzLmNvbXBsZXRpbmcgPSB0aGlzLnN1Z2dlc3QodGhpcy5pbnB1dCwgdGhpcy5jaG9pY2VzKSk7XG4gICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSBhd2FpdCBwO1xuXG4gICAgaWYgKHRoaXMuY29tcGxldGluZyAhPT0gcCkgcmV0dXJuO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBzdWdnZXN0aW9uc1xuICAgICAgLm1hcCgocywgaSwgYXJyKSA9PiAoeyB0aXRsZTogZ2V0VGl0bGUoYXJyLCBpKSwgdmFsdWU6IGdldFZhbChhcnIsIGkpLCBkZXNjcmlwdGlvbjogcy5kZXNjcmlwdGlvbiB9KSk7XG4gICAgdGhpcy5jb21wbGV0aW5nID0gZmFsc2U7XG4gICAgY29uc3QgbCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25zLmxlbmd0aCAtIDEsIDApO1xuICAgIHRoaXMubW92ZVNlbGVjdChNYXRoLm1pbihsLCB0aGlzLnNlbGVjdCkpO1xuXG4gICAgY2IgJiYgY2IoKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuaW5wdXQgPSAnJztcbiAgICB0aGlzLmNvbXBsZXRlKCgpID0+IHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCh0aGlzLmluaXRpYWwgIT09IHZvaWQgMCA/IHRoaXMuaW5pdGlhbCA6IDApO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICBpZiAodGhpcy5jbGVhckZpcnN0ICYmIHRoaXMuaW5wdXQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvbmUgPSB0aGlzLmV4aXRlZCA9IHRydWU7IFxuICAgICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmV4aXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgIHRoaXMuYWJvcnRlZCA9IHRoaXMuZXhpdGVkID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBsZXQgczEgPSB0aGlzLmlucHV0LnNsaWNlKDAsIHRoaXMuY3Vyc29yKTtcbiAgICBsZXQgczIgPSB0aGlzLmlucHV0LnNsaWNlKHRoaXMuY3Vyc29yKTtcbiAgICB0aGlzLmlucHV0ID0gYCR7czF9JHtjfSR7czJ9YDtcbiAgICB0aGlzLmN1cnNvciA9IHMxLmxlbmd0aCsxO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSAwKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgbGV0IHMxID0gdGhpcy5pbnB1dC5zbGljZSgwLCB0aGlzLmN1cnNvci0xKTtcbiAgICBsZXQgczIgPSB0aGlzLmlucHV0LnNsaWNlKHRoaXMuY3Vyc29yKTtcbiAgICB0aGlzLmlucHV0ID0gYCR7czF9JHtzMn1gO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5jdXJzb3ItMTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlRm9yd2FyZCgpIHtcbiAgICBpZih0aGlzLmN1cnNvcip0aGlzLnNjYWxlID49IHRoaXMucmVuZGVyZWQubGVuZ3RoKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgbGV0IHMxID0gdGhpcy5pbnB1dC5zbGljZSgwLCB0aGlzLmN1cnNvcik7XG4gICAgbGV0IHMyID0gdGhpcy5pbnB1dC5zbGljZSh0aGlzLmN1cnNvcisxKTtcbiAgICB0aGlzLmlucHV0ID0gYCR7czF9JHtzMn1gO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBmaXJzdCgpIHtcbiAgICB0aGlzLm1vdmVTZWxlY3QoMCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxhc3QoKSB7XG4gICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdCA9PT0gMCkge1xuICAgICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCh0aGlzLnNlbGVjdCAtIDEpO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICBpZiAodGhpcy5zZWxlY3QgPT09IHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5tb3ZlU2VsZWN0KDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vdmVTZWxlY3QodGhpcy5zZWxlY3QgKyAxKTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ID09PSB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCAtIDEpIHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCgwKTtcbiAgICB9IGVsc2UgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc2VsZWN0ICsgMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG5leHRQYWdlKCkge1xuICAgIHRoaXMubW92ZVNlbGVjdChNYXRoLm1pbih0aGlzLnNlbGVjdCArIHRoaXMubGltaXQsIHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSkpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBwcmV2UGFnZSgpIHtcbiAgICB0aGlzLm1vdmVTZWxlY3QoTWF0aC5tYXgodGhpcy5zZWxlY3QgLSB0aGlzLmxpbWl0LCAwKSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxlZnQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yIDw9IDApIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMuY3Vyc29yLTE7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJpZ2h0KCkge1xuICAgIGlmICh0aGlzLmN1cnNvcip0aGlzLnNjYWxlID49IHRoaXMucmVuZGVyZWQubGVuZ3RoKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmN1cnNvcisxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByZW5kZXJPcHRpb24odiwgaG92ZXJlZCwgaXNTdGFydCwgaXNFbmQpIHtcbiAgICBsZXQgZGVzYztcbiAgICBsZXQgcHJlZml4ID0gaXNTdGFydCA/IGZpZ3VyZXMuYXJyb3dVcCA6IGlzRW5kID8gZmlndXJlcy5hcnJvd0Rvd24gOiAnICc7XG4gICAgbGV0IHRpdGxlID0gaG92ZXJlZCA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodi50aXRsZSkgOiB2LnRpdGxlO1xuICAgIHByZWZpeCA9IChob3ZlcmVkID8gY29sb3IuY3lhbihmaWd1cmVzLnBvaW50ZXIpICsgJyAnIDogJyAgJykgKyBwcmVmaXg7XG4gICAgaWYgKHYuZGVzY3JpcHRpb24pIHtcbiAgICAgIGRlc2MgPSBgIC0gJHt2LmRlc2NyaXB0aW9ufWA7XG4gICAgICBpZiAocHJlZml4Lmxlbmd0aCArIHRpdGxlLmxlbmd0aCArIGRlc2MubGVuZ3RoID49IHRoaXMub3V0LmNvbHVtbnNcbiAgICAgICAgfHwgdi5kZXNjcmlwdGlvbi5zcGxpdCgvXFxyP1xcbi8pLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZGVzYyA9ICdcXG4nICsgd3JhcCh2LmRlc2NyaXB0aW9uLCB7IG1hcmdpbjogMywgd2lkdGg6IHRoaXMub3V0LmNvbHVtbnMgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByZWZpeCArICcgJyArIHRpdGxlICsgY29sb3IuZ3JheShkZXNjIHx8ICcnKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5maXJzdFJlbmRlcikgdGhpcy5vdXQud3JpdGUoY3Vyc29yLmhpZGUpO1xuICAgIGVsc2UgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG5cbiAgICBsZXQgeyBzdGFydEluZGV4LCBlbmRJbmRleCB9ID0gZW50cmllc1RvRGlzcGxheSh0aGlzLnNlbGVjdCwgdGhpcy5jaG9pY2VzLmxlbmd0aCwgdGhpcy5saW1pdCk7XG5cbiAgICB0aGlzLm91dHB1dFRleHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQsIHRoaXMuZXhpdGVkKSxcbiAgICAgIGNvbG9yLmJvbGQodGhpcy5tc2cpLFxuICAgICAgc3R5bGUuZGVsaW1pdGVyKHRoaXMuY29tcGxldGluZyksXG4gICAgICB0aGlzLmRvbmUgJiYgdGhpcy5zdWdnZXN0aW9uc1t0aGlzLnNlbGVjdF1cbiAgICAgICAgPyB0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuc2VsZWN0XS50aXRsZVxuICAgICAgICA6IHRoaXMucmVuZGVyZWQgPSB0aGlzLnRyYW5zZm9ybS5yZW5kZXIodGhpcy5pbnB1dClcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIGlmICghdGhpcy5kb25lKSB7XG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHRoaXMuc3VnZ2VzdGlvbnNcbiAgICAgICAgLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KVxuICAgICAgICAubWFwKChpdGVtLCBpKSA9PiAgdGhpcy5yZW5kZXJPcHRpb24oaXRlbSxcbiAgICAgICAgICB0aGlzLnNlbGVjdCA9PT0gaSArIHN0YXJ0SW5kZXgsXG4gICAgICAgICAgaSA9PT0gMCAmJiBzdGFydEluZGV4ID4gMCxcbiAgICAgICAgICBpICsgc3RhcnRJbmRleCA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgdGhpcy5jaG9pY2VzLmxlbmd0aCkpXG4gICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICAgIHRoaXMub3V0cHV0VGV4dCArPSBgXFxuYCArIChzdWdnZXN0aW9ucyB8fCBjb2xvci5ncmF5KHRoaXMuZmFsbGJhY2sudGl0bGUpKTtcbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZShlcmFzZS5saW5lICsgY3Vyc29yLnRvKDApICsgdGhpcy5vdXRwdXRUZXh0KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEF1dG9jb21wbGV0ZVByb21wdDtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuY29uc3QgeyBjdXJzb3IgfSA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKTtcbmNvbnN0IE11bHRpc2VsZWN0UHJvbXB0ID0gcmVxdWlyZSgnLi9tdWx0aXNlbGVjdCcpO1xuY29uc3QgeyBjbGVhciwgc3R5bGUsIGZpZ3VyZXMgfSA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcbi8qKlxuICogTXVsdGlzZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLndhcm5dIEhpbnQgc2hvd24gZm9yIGRpc2FibGVkIGNob2ljZXNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXhdIE1heCBjaG9pY2VzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKi9cbmNsYXNzIEF1dG9jb21wbGV0ZU11bHRpc2VsZWN0UHJvbXB0IGV4dGVuZHMgTXVsdGlzZWxlY3RQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgb3B0cy5vdmVycmlkZVJlbmRlciA9IHRydWU7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gJyc7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxhc3QoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cbiAgbmV4dCgpIHtcbiAgICB0aGlzLmN1cnNvciA9ICh0aGlzLmN1cnNvciArIDEpICUgdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICB1cCgpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IgPT09IDApIHtcbiAgICAgIHRoaXMuY3Vyc29yID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJzb3ItLTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLmN1cnNvciA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3Vyc29yKys7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuY3Vyc29yXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByaWdodCgpIHtcbiAgICBpZiAodGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy5jdXJzb3JdLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlKCkge1xuICAgIGlmICh0aGlzLmlucHV0VmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmlucHV0VmFsdWUuc3Vic3RyKDAsIHRoaXMuaW5wdXRWYWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWRPcHRpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRmlsdGVyZWRPcHRpb25zKCkge1xuICAgIGNvbnN0IGN1cnJlbnRIaWdobGlnaHQgPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmN1cnNvcl07XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLnZhbHVlXG4gICAgICAuZmlsdGVyKHYgPT4ge1xuICAgICAgICBpZiAodGhpcy5pbnB1dFZhbHVlKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2LnRpdGxlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKHYudGl0bGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmlucHV0VmFsdWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2Ygdi52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICh2LnZhbHVlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5pbnB1dFZhbHVlLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICBjb25zdCBuZXdIaWdobGlnaHRJbmRleCA9IHRoaXMuZmlsdGVyZWRPcHRpb25zLmZpbmRJbmRleCh2ID0+IHYgPT09IGN1cnJlbnRIaWdobGlnaHQpXG4gICAgdGhpcy5jdXJzb3IgPSBuZXdIaWdobGlnaHRJbmRleCA8IDAgPyAwIDogbmV3SGlnaGxpZ2h0SW5kZXg7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGhhbmRsZVNwYWNlVG9nZ2xlKCkge1xuICAgIGNvbnN0IHYgPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmN1cnNvcl07XG5cbiAgICBpZiAodi5zZWxlY3RlZCkge1xuICAgICAgdi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9IGVsc2UgaWYgKHYuZGlzYWJsZWQgfHwgdGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHYuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVJbnB1dENoYW5nZShjKSB7XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5pbnB1dFZhbHVlICsgYztcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmVkT3B0aW9ucygpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYyA9PT0gJyAnKSB7XG4gICAgICB0aGlzLmhhbmRsZVNwYWNlVG9nZ2xlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2UoYyk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmluc3RydWN0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuaW5zdHJ1Y3Rpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnN0cnVjdGlvbnM7XG4gICAgICB9XG4gICAgICByZXR1cm4gYFxuSW5zdHJ1Y3Rpb25zOlxuICAgICR7ZmlndXJlcy5hcnJvd1VwfS8ke2ZpZ3VyZXMuYXJyb3dEb3dufTogSGlnaGxpZ2h0IG9wdGlvblxuICAgICR7ZmlndXJlcy5hcnJvd0xlZnR9LyR7ZmlndXJlcy5hcnJvd1JpZ2h0fS9bc3BhY2VdOiBUb2dnbGUgc2VsZWN0aW9uXG4gICAgW2EsYixjXS9kZWxldGU6IEZpbHRlciBjaG9pY2VzXG4gICAgZW50ZXIvcmV0dXJuOiBDb21wbGV0ZSBhbnN3ZXJcbmA7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlckN1cnJlbnRJbnB1dCgpIHtcbiAgICByZXR1cm4gYFxuRmlsdGVyZWQgcmVzdWx0cyBmb3I6ICR7dGhpcy5pbnB1dFZhbHVlID8gdGhpcy5pbnB1dFZhbHVlIDogY29sb3IuZ3JheSgnRW50ZXIgc29tZXRoaW5nIHRvIGZpbHRlcicpfVxcbmA7XG4gIH1cblxuICByZW5kZXJPcHRpb24oY3Vyc29yLCB2LCBpKSB7XG4gICAgbGV0IHRpdGxlO1xuICAgIGlmICh2LmRpc2FibGVkKSB0aXRsZSA9IGN1cnNvciA9PT0gaSA/IGNvbG9yLmdyYXkoKS51bmRlcmxpbmUodi50aXRsZSkgOiBjb2xvci5zdHJpa2V0aHJvdWdoKCkuZ3JheSh2LnRpdGxlKTtcbiAgICBlbHNlIHRpdGxlID0gY3Vyc29yID09PSBpID8gY29sb3IuY3lhbigpLnVuZGVybGluZSh2LnRpdGxlKSA6IHYudGl0bGU7XG4gICAgcmV0dXJuICh2LnNlbGVjdGVkID8gY29sb3IuZ3JlZW4oZmlndXJlcy5yYWRpb09uKSA6IGZpZ3VyZXMucmFkaW9PZmYpICsgJyAgJyArIHRpdGxlXG4gIH1cblxuICByZW5kZXJEb25lT3JJbnN0cnVjdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgICAgICAgLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpXG4gICAgICAgIC5tYXAodiA9PiB2LnRpdGxlKVxuICAgICAgICAuam9pbignLCAnKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQgPSBbY29sb3IuZ3JheSh0aGlzLmhpbnQpLCB0aGlzLnJlbmRlckluc3RydWN0aW9ucygpLCB0aGlzLnJlbmRlckN1cnJlbnRJbnB1dCgpXTtcblxuICAgIGlmICh0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggJiYgdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy5jdXJzb3JdLmRpc2FibGVkKSB7XG4gICAgICBvdXRwdXQucHVzaChjb2xvci55ZWxsb3codGhpcy53YXJuKSk7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQuam9pbignICcpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG5cbiAgICAvLyBwcmludCBwcm9tcHRcblxuICAgIGxldCBwcm9tcHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLFxuICAgICAgY29sb3IuYm9sZCh0aGlzLm1zZyksXG4gICAgICBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLFxuICAgICAgdGhpcy5yZW5kZXJEb25lT3JJbnN0cnVjdGlvbnMoKVxuICAgIF0uam9pbignICcpO1xuXG4gICAgaWYgKHRoaXMuc2hvd01pbkVycm9yKSB7XG4gICAgICBwcm9tcHQgKz0gY29sb3IucmVkKGBZb3UgbXVzdCBzZWxlY3QgYSBtaW5pbXVtIG9mICR7dGhpcy5taW5TZWxlY3RlZH0gY2hvaWNlcy5gKTtcbiAgICAgIHRoaXMuc2hvd01pbkVycm9yID0gZmFsc2U7XG4gICAgfVxuICAgIHByb21wdCArPSB0aGlzLnJlbmRlck9wdGlvbnModGhpcy5maWx0ZXJlZE9wdGlvbnMpO1xuXG4gICAgdGhpcy5vdXQud3JpdGUodGhpcy5jbGVhciArIHByb21wdCk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKHByb21wdCwgdGhpcy5vdXQuY29sdW1ucyk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdDtcbiIsImNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcbmNvbnN0IFByb21wdCA9IHJlcXVpcmUoJy4vcHJvbXB0Jyk7XG5jb25zdCB7IHN0eWxlLCBjbGVhciB9ID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xuY29uc3QgeyBlcmFzZSwgY3Vyc29yIH0gPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyk7XG5cbi8qKlxuICogQ29uZmlybVByb21wdCBCYXNlIEVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLm1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5pbml0aWFsXSBEZWZhdWx0IHZhbHVlICh0cnVlL2ZhbHNlKVxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMueWVzXSBUaGUgXCJZZXNcIiBsYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnllc09wdGlvbl0gVGhlIFwiWWVzXCIgb3B0aW9uIHdoZW4gY2hvb3NpbmcgYmV0d2VlbiB5ZXMvbm9cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5ub10gVGhlIFwiTm9cIiBsYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm5vT3B0aW9uXSBUaGUgXCJOb1wiIG9wdGlvbiB3aGVuIGNob29zaW5nIGJldHdlZW4geWVzL25vXG4gKi9cbmNsYXNzIENvbmZpcm1Qcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy52YWx1ZSA9IG9wdHMuaW5pdGlhbDtcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9ICEhb3B0cy5pbml0aWFsO1xuICAgIHRoaXMueWVzTXNnID0gb3B0cy55ZXMgfHwgJ3llcyc7XG4gICAgdGhpcy55ZXNPcHRpb24gPSBvcHRzLnllc09wdGlvbiB8fCAnKFkvbiknO1xuICAgIHRoaXMubm9Nc2cgPSBvcHRzLm5vIHx8ICdubyc7XG4gICAgdGhpcy5ub09wdGlvbiA9IG9wdHMubm9PcHRpb24gfHwgJyh5L04pJztcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuaW5pdGlhbFZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuZG9uZSA9IHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlIHx8IGZhbHNlO1xuICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYy50b0xvd2VyQ2FzZSgpID09PSAneScpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0KCk7XG4gICAgfVxuICAgIGlmIChjLnRvTG93ZXJDYXNlKCkgPT09ICduJykge1xuICAgICAgdGhpcy52YWx1ZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5maXJzdFJlbmRlcikgdGhpcy5vdXQud3JpdGUoY3Vyc29yLmhpZGUpO1xuICAgIGVsc2UgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG5cbiAgICB0aGlzLm91dHB1dFRleHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLFxuICAgICAgY29sb3IuYm9sZCh0aGlzLm1zZyksXG4gICAgICBzdHlsZS5kZWxpbWl0ZXIodGhpcy5kb25lKSxcbiAgICAgIHRoaXMuZG9uZSA/ICh0aGlzLnZhbHVlID8gdGhpcy55ZXNNc2cgOiB0aGlzLm5vTXNnKVxuICAgICAgICAgIDogY29sb3IuZ3JheSh0aGlzLmluaXRpYWxWYWx1ZSA/IHRoaXMueWVzT3B0aW9uIDogdGhpcy5ub09wdGlvbilcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29uZmlybVByb21wdDtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFRleHRQcm9tcHQ6IHJlcXVpcmUoJy4vdGV4dCcpLFxuICBTZWxlY3RQcm9tcHQ6IHJlcXVpcmUoJy4vc2VsZWN0JyksXG4gIFRvZ2dsZVByb21wdDogcmVxdWlyZSgnLi90b2dnbGUnKSxcbiAgRGF0ZVByb21wdDogcmVxdWlyZSgnLi9kYXRlJyksXG4gIE51bWJlclByb21wdDogcmVxdWlyZSgnLi9udW1iZXInKSxcbiAgTXVsdGlzZWxlY3RQcm9tcHQ6IHJlcXVpcmUoJy4vbXVsdGlzZWxlY3QnKSxcbiAgQXV0b2NvbXBsZXRlUHJvbXB0OiByZXF1aXJlKCcuL2F1dG9jb21wbGV0ZScpLFxuICBBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdDogcmVxdWlyZSgnLi9hdXRvY29tcGxldGVNdWx0aXNlbGVjdCcpLFxuICBDb25maXJtUHJvbXB0OiByZXF1aXJlKCcuL2NvbmZpcm0nKVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0ICQgPSBleHBvcnRzO1xuY29uc3QgZWwgPSByZXF1aXJlKCcuL2VsZW1lbnRzJyk7XG5jb25zdCBub29wID0gdiA9PiB2O1xuXG5mdW5jdGlvbiB0b1Byb21wdCh0eXBlLCBhcmdzLCBvcHRzPXt9KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICBjb25zdCBwID0gbmV3IGVsW3R5cGVdKGFyZ3MpO1xuICAgIGNvbnN0IG9uQWJvcnQgPSBvcHRzLm9uQWJvcnQgfHwgbm9vcDtcbiAgICBjb25zdCBvblN1Ym1pdCA9IG9wdHMub25TdWJtaXQgfHwgbm9vcDtcbiAgICBjb25zdCBvbkV4aXQgPSBvcHRzLm9uRXhpdCB8fCBub29wO1xuICAgIHAub24oJ3N0YXRlJywgYXJncy5vblN0YXRlIHx8IG5vb3ApO1xuICAgIHAub24oJ3N1Ym1pdCcsIHggPT4gcmVzKG9uU3VibWl0KHgpKSk7XG4gICAgcC5vbignZXhpdCcsIHggPT4gcmVzKG9uRXhpdCh4KSkpO1xuICAgIHAub24oJ2Fib3J0JywgeCA9PiByZWoob25BYm9ydCh4KSkpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUZXh0IHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5zdHlsZT1cImRlZmF1bHRcIl0gUmVuZGVyIHN0eWxlICgnZGVmYXVsdCcsICdwYXNzd29yZCcsICdpbnZpc2libGUnKVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC50ZXh0ID0gYXJncyA9PiB0b1Byb21wdCgnVGV4dFByb21wdCcsIGFyZ3MpO1xuXG4vKipcbiAqIFBhc3N3b3JkIHByb21wdCB3aXRoIG1hc2tlZCBpbnB1dFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cbiQucGFzc3dvcmQgPSBhcmdzID0+IHtcbiAgYXJncy5zdHlsZSA9ICdwYXNzd29yZCc7XG4gIHJldHVybiAkLnRleHQoYXJncyk7XG59O1xuXG4vKipcbiAqIFByb21wdCB3aGVyZSBpbnB1dCBpcyBpbnZpc2libGUsIGxpa2Ugc3Vkb1xuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cbiQuaW52aXNpYmxlID0gYXJncyA9PiB7XG4gIGFyZ3Muc3R5bGUgPSAnaW52aXNpYmxlJztcbiAgcmV0dXJuICQudGV4dChhcmdzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge251bWJlcn0gYXJncy5pbml0aWFsIERlZmF1bHQgbnVtYmVyIHZhbHVlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5tYXhdIE1heCB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1pbl0gTWluIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3R5bGU9XCJkZWZhdWx0XCJdIFJlbmRlciBzdHlsZSAoJ2RlZmF1bHQnLCAncGFzc3dvcmQnLCAnaW52aXNpYmxlJylcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuZmxvYXQ9ZmFsc2VdIFBhcnNlIGlucHV0IGFzIGZsb2F0c1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnJvdW5kPTJdIFJvdW5kIGZsb2F0cyB0byB4IGRlY2ltYWxzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5jcmVtZW50PTFdIE51bWJlciB0byBpbmNyZW1lbnQgYnkgd2hlbiB1c2luZyBhcnJvdy1rZXlzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5udW1iZXIgPSBhcmdzID0+IHRvUHJvbXB0KCdOdW1iZXJQcm9tcHQnLCBhcmdzKTtcblxuLyoqXG4gKiBEYXRlIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge251bWJlcn0gYXJncy5pbml0aWFsIERlZmF1bHQgbnVtYmVyIHZhbHVlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5tYXhdIE1heCB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1pbl0gTWluIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3R5bGU9XCJkZWZhdWx0XCJdIFJlbmRlciBzdHlsZSAoJ2RlZmF1bHQnLCAncGFzc3dvcmQnLCAnaW52aXNpYmxlJylcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuZmxvYXQ9ZmFsc2VdIFBhcnNlIGlucHV0IGFzIGZsb2F0c1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnJvdW5kPTJdIFJvdW5kIGZsb2F0cyB0byB4IGRlY2ltYWxzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5jcmVtZW50PTFdIE51bWJlciB0byBpbmNyZW1lbnQgYnkgd2hlbiB1c2luZyBhcnJvdy1rZXlzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5kYXRlID0gYXJncyA9PiB0b1Byb21wdCgnRGF0ZVByb21wdCcsIGFyZ3MpO1xuXG4vKipcbiAqIENsYXNzaWMgeWVzL25vIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmluaXRpYWw9ZmFsc2VdIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5jb25maXJtID0gYXJncyA9PiB0b1Byb21wdCgnQ29uZmlybVByb21wdCcsIGFyZ3MpO1xuXG4vKipcbiAqIExpc3QgcHJvbXB0LCBzcGxpdCBpbnRwdXQgc3RyaW5nIGJ5IGBzZXBlcmF0b3JgXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5pbml0aWFsXSBEZWZhdWx0IHN0cmluZyB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnN0eWxlPVwiZGVmYXVsdFwiXSBSZW5kZXIgc3R5bGUgKCdkZWZhdWx0JywgJ3Bhc3N3b3JkJywgJ2ludmlzaWJsZScpXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc2VwYXJhdG9yXSBTdHJpbmcgc2VwYXJhdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0LCBpbiBmb3JtIG9mIGFuIGBBcnJheWBcbiAqL1xuJC5saXN0ID0gYXJncyA9PiB7XG4gIGNvbnN0IHNlcCA9IGFyZ3Muc2VwYXJhdG9yIHx8ICcsJztcbiAgcmV0dXJuIHRvUHJvbXB0KCdUZXh0UHJvbXB0JywgYXJncywge1xuICAgIG9uU3VibWl0OiBzdHIgPT4gc3RyLnNwbGl0KHNlcCkubWFwKHMgPT4gcy50cmltKCkpXG4gIH0pO1xufTtcblxuLyoqXG4gKiBUb2dnbGUvc3dpdGNoIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmluaXRpYWw9ZmFsc2VdIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5hY3RpdmU9XCJvblwiXSBUZXh0IGZvciBgYWN0aXZlYCBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmluYWN0aXZlPVwib2ZmXCJdIFRleHQgZm9yIGBpbmFjdGl2ZWAgc3RhdGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC50b2dnbGUgPSBhcmdzID0+IHRvUHJvbXB0KCdUb2dnbGVQcm9tcHQnLCBhcmdzKTtcblxuLyoqXG4gKiBJbnRlcmFjdGl2ZSBzZWxlY3QgcHJvbXB0XG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2VzIG9iamVjdHMgYFt7IHRpdGxlLCB2YWx1ZSB9LCAuLi5dYFxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLmluaXRpYWxdIEluZGV4IG9mIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbYXJncy5oaW50XSBIaW50IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5zZWxlY3QgPSBhcmdzID0+IHRvUHJvbXB0KCdTZWxlY3RQcm9tcHQnLCBhcmdzKTtcblxuLyoqXG4gKiBJbnRlcmFjdGl2ZSBtdWx0aS1zZWxlY3QgLyBhdXRvY29tcGxldGVNdWx0aXNlbGVjdCBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtBcnJheX0gYXJncy5jaG9pY2VzIEFycmF5IG9mIGNob2ljZXMgb2JqZWN0cyBgW3sgdGl0bGUsIHZhbHVlLCBbc2VsZWN0ZWRdIH0sIC4uLl1gXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MubWF4XSBNYXggc2VsZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaGludF0gSGludCB0byBkaXNwbGF5IHVzZXJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbYXJncy5jdXJzb3I9MF0gQ3Vyc29yIHN0YXJ0IHBvc2l0aW9uXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cbiQubXVsdGlzZWxlY3QgPSBhcmdzID0+IHtcbiAgYXJncy5jaG9pY2VzID0gW10uY29uY2F0KGFyZ3MuY2hvaWNlcyB8fCBbXSk7XG4gIGNvbnN0IHRvU2VsZWN0ZWQgPSBpdGVtcyA9PiBpdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnNlbGVjdGVkKS5tYXAoaXRlbSA9PiBpdGVtLnZhbHVlKTtcbiAgcmV0dXJuIHRvUHJvbXB0KCdNdWx0aXNlbGVjdFByb21wdCcsIGFyZ3MsIHtcbiAgICBvbkFib3J0OiB0b1NlbGVjdGVkLFxuICAgIG9uU3VibWl0OiB0b1NlbGVjdGVkXG4gIH0pO1xufTtcblxuJC5hdXRvY29tcGxldGVNdWx0aXNlbGVjdCA9IGFyZ3MgPT4ge1xuICBhcmdzLmNob2ljZXMgPSBbXS5jb25jYXQoYXJncy5jaG9pY2VzIHx8IFtdKTtcbiAgY29uc3QgdG9TZWxlY3RlZCA9IGl0ZW1zID0+IGl0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0uc2VsZWN0ZWQpLm1hcChpdGVtID0+IGl0ZW0udmFsdWUpO1xuICByZXR1cm4gdG9Qcm9tcHQoJ0F1dG9jb21wbGV0ZU11bHRpc2VsZWN0UHJvbXB0JywgYXJncywge1xuICAgIG9uQWJvcnQ6IHRvU2VsZWN0ZWQsXG4gICAgb25TdWJtaXQ6IHRvU2VsZWN0ZWRcbiAgfSk7XG59O1xuXG5jb25zdCBieVRpdGxlID0gKGlucHV0LCBjaG9pY2VzKSA9PiBQcm9taXNlLnJlc29sdmUoXG4gIGNob2ljZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS50aXRsZS5zbGljZSgwLCBpbnB1dC5sZW5ndGgpLnRvTG93ZXJDYXNlKCkgPT09IGlucHV0LnRvTG93ZXJDYXNlKCkpXG4pO1xuXG4vKipcbiAqIEludGVyYWN0aXZlIGF1dG8tY29tcGxldGUgcHJvbXB0XG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MuY2hvaWNlcyBBcnJheSBvZiBhdXRvLWNvbXBsZXRlIGNob2ljZXMgb2JqZWN0cyBgW3sgdGl0bGUsIHZhbHVlIH0sIC4uLl1gXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbYXJncy5zdWdnZXN0XSBGdW5jdGlvbiB0byBmaWx0ZXIgcmVzdWx0cyBiYXNlZCBvbiB1c2VyIGlucHV0LiBEZWZhdWx0cyB0byBzb3J0IGJ5IGB0aXRsZWBcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5saW1pdD0xMF0gTWF4IG51bWJlciBvZiByZXN1bHRzIHRvIHNob3dcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5zdHlsZT1cImRlZmF1bHRcIl0gUmVuZGVyIHN0eWxlICgnZGVmYXVsdCcsICdwYXNzd29yZCcsICdpbnZpc2libGUnKVxuICogQHBhcmFtIHtTdHJpbmd9IFthcmdzLmluaXRpYWxdIEluZGV4IG9mIHRoZSBkZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmNsZWFyRmlyc3RdIFRoZSBmaXJzdCBFU0NBUEUga2V5cHJlc3Mgd2lsbCBjbGVhciB0aGUgaW5wdXRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbYXJncy5mYWxsYmFja10gRmFsbGJhY2sgbWVzc2FnZSAtIGRlZmF1bHRzIHRvIGluaXRpYWwgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5hdXRvY29tcGxldGUgPSBhcmdzID0+IHtcbiAgYXJncy5zdWdnZXN0ID0gYXJncy5zdWdnZXN0IHx8IGJ5VGl0bGU7XG4gIGFyZ3MuY2hvaWNlcyA9IFtdLmNvbmNhdChhcmdzLmNob2ljZXMgfHwgW10pO1xuICByZXR1cm4gdG9Qcm9tcHQoJ0F1dG9jb21wbGV0ZVByb21wdCcsIGFyZ3MpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgcHJvbXB0cyA9IHJlcXVpcmUoJy4vcHJvbXB0cycpO1xuXG5jb25zdCBwYXNzT24gPSBbJ3N1Z2dlc3QnLCAnZm9ybWF0JywgJ29uU3RhdGUnLCAndmFsaWRhdGUnLCAnb25SZW5kZXInLCAndHlwZSddO1xuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG4vKipcbiAqIFByb21wdCBmb3IgYSBzZXJpZXMgb2YgcXVlc3Rpb25zXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gcXVlc3Rpb25zIFNpbmdsZSBxdWVzdGlvbiBvYmplY3Qgb3IgQXJyYXkgb2YgcXVlc3Rpb24gb2JqZWN0c1xuICogQHBhcmFtIHtGdW5jdGlvbn0gW29uU3VibWl0XSBDYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgb24gcHJvbXB0IHN1Ym1pdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29uQ2FuY2VsXSBDYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgb24gY2FuY2VsL2Fib3J0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBPYmplY3Qgd2l0aCB2YWx1ZXMgZnJvbSB1c2VyIGlucHV0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb21wdChxdWVzdGlvbnM9W10sIHsgb25TdWJtaXQ9bm9vcCwgb25DYW5jZWw9bm9vcCB9PXt9KSB7XG4gIGNvbnN0IGFuc3dlcnMgPSB7fTtcbiAgY29uc3Qgb3ZlcnJpZGUgPSBwcm9tcHQuX292ZXJyaWRlIHx8IHt9O1xuICBxdWVzdGlvbnMgPSBbXS5jb25jYXQocXVlc3Rpb25zKTtcbiAgbGV0IGFuc3dlciwgcXVlc3Rpb24sIHF1aXQsIG5hbWUsIHR5cGUsIGxhc3RQcm9tcHQ7XG5cbiAgY29uc3QgZ2V0Rm9ybWF0dGVkQW5zd2VyID0gYXN5bmMgKHF1ZXN0aW9uLCBhbnN3ZXIsIHNraXBWYWxpZGF0aW9uID0gZmFsc2UpID0+IHtcbiAgICBpZiAoIXNraXBWYWxpZGF0aW9uICYmIHF1ZXN0aW9uLnZhbGlkYXRlICYmIHF1ZXN0aW9uLnZhbGlkYXRlKGFuc3dlcikgIT09IHRydWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXN0aW9uLmZvcm1hdCA/IGF3YWl0IHF1ZXN0aW9uLmZvcm1hdChhbnN3ZXIsIGFuc3dlcnMpIDogYW5zd2VyXG4gIH07XG5cbiAgZm9yIChxdWVzdGlvbiBvZiBxdWVzdGlvbnMpIHtcbiAgICAoeyBuYW1lLCB0eXBlIH0gPSBxdWVzdGlvbik7XG5cbiAgICAvLyBldmFsdWF0ZSB0eXBlIGZpcnN0IGFuZCBza2lwIGlmIHR5cGUgaXMgYSBmYWxzeSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdHlwZSA9IGF3YWl0IHR5cGUoYW5zd2VyLCB7IC4uLmFuc3dlcnMgfSwgcXVlc3Rpb24pXG4gICAgICBxdWVzdGlvblsndHlwZSddID0gdHlwZVxuICAgIH1cbiAgICBpZiAoIXR5cGUpIGNvbnRpbnVlO1xuXG4gICAgLy8gaWYgcHJvcGVydHkgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IHVubGVzcyBpdCdzIGEgc3BlY2lhbCBmdW5jdGlvblxuICAgIGZvciAobGV0IGtleSBpbiBxdWVzdGlvbikge1xuICAgICAgaWYgKHBhc3NPbi5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTtcbiAgICAgIGxldCB2YWx1ZSA9IHF1ZXN0aW9uW2tleV07XG4gICAgICBxdWVzdGlvbltrZXldID0gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gYXdhaXQgdmFsdWUoYW5zd2VyLCB7IC4uLmFuc3dlcnMgfSwgbGFzdFByb21wdCkgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICBsYXN0UHJvbXB0ID0gcXVlc3Rpb247XG5cbiAgICBpZiAodHlwZW9mIHF1ZXN0aW9uLm1lc3NhZ2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb21wdCBtZXNzYWdlIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIHZhcnMgaW4gY2FzZSB0aGV5IGNoYW5nZWRcbiAgICAoeyBuYW1lLCB0eXBlIH0gPSBxdWVzdGlvbik7XG5cbiAgICBpZiAocHJvbXB0c1t0eXBlXSA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHByb21wdCB0eXBlICgke3R5cGV9KSBpcyBub3QgZGVmaW5lZGApO1xuICAgIH1cblxuICAgIGlmIChvdmVycmlkZVtxdWVzdGlvbi5uYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhbnN3ZXIgPSBhd2FpdCBnZXRGb3JtYXR0ZWRBbnN3ZXIocXVlc3Rpb24sIG92ZXJyaWRlW3F1ZXN0aW9uLm5hbWVdKTtcbiAgICAgIGlmIChhbnN3ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhbnN3ZXJzW25hbWVdID0gYW5zd2VyO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gR2V0IHRoZSBpbmplY3RlZCBhbnN3ZXIgaWYgdGhlcmUgaXMgb25lIG9yIHByb21wdCB0aGUgdXNlclxuICAgICAgYW5zd2VyID0gcHJvbXB0Ll9pbmplY3RlZCA/IGdldEluamVjdGVkQW5zd2VyKHByb21wdC5faW5qZWN0ZWQsIHF1ZXN0aW9uLmluaXRpYWwpIDogYXdhaXQgcHJvbXB0c1t0eXBlXShxdWVzdGlvbik7XG4gICAgICBhbnN3ZXJzW25hbWVdID0gYW5zd2VyID0gYXdhaXQgZ2V0Rm9ybWF0dGVkQW5zd2VyKHF1ZXN0aW9uLCBhbnN3ZXIsIHRydWUpO1xuICAgICAgcXVpdCA9IGF3YWl0IG9uU3VibWl0KHF1ZXN0aW9uLCBhbnN3ZXIsIGFuc3dlcnMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcXVpdCA9ICEoYXdhaXQgb25DYW5jZWwocXVlc3Rpb24sIGFuc3dlcnMpKTtcbiAgICB9XG5cbiAgICBpZiAocXVpdCkgcmV0dXJuIGFuc3dlcnM7XG4gIH1cblxuICByZXR1cm4gYW5zd2Vycztcbn1cblxuZnVuY3Rpb24gZ2V0SW5qZWN0ZWRBbnN3ZXIoaW5qZWN0ZWQsIGRlYWZ1bHRWYWx1ZSkge1xuICBjb25zdCBhbnN3ZXIgPSBpbmplY3RlZC5zaGlmdCgpO1xuICAgIGlmIChhbnN3ZXIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgdGhyb3cgYW5zd2VyO1xuICAgIH1cblxuICAgIHJldHVybiAoYW5zd2VyID09PSB1bmRlZmluZWQpID8gZGVhZnVsdFZhbHVlIDogYW5zd2VyO1xufVxuXG5mdW5jdGlvbiBpbmplY3QoYW5zd2Vycykge1xuICBwcm9tcHQuX2luamVjdGVkID0gKHByb21wdC5faW5qZWN0ZWQgfHwgW10pLmNvbmNhdChhbnN3ZXJzKTtcbn1cblxuZnVuY3Rpb24gb3ZlcnJpZGUoYW5zd2Vycykge1xuICBwcm9tcHQuX292ZXJyaWRlID0gT2JqZWN0LmFzc2lnbih7fSwgYW5zd2Vycyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbihwcm9tcHQsIHsgcHJvbXB0LCBwcm9tcHRzLCBpbmplY3QsIG92ZXJyaWRlIH0pO1xuIiwiZnVuY3Rpb24gaXNOb2RlTFQodGFyKSB7XG4gIHRhciA9IChBcnJheS5pc0FycmF5KHRhcikgPyB0YXIgOiB0YXIuc3BsaXQoJy4nKSkubWFwKE51bWJlcik7XG4gIGxldCBpPTAsIHNyYz1wcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKS5tYXAoTnVtYmVyKTtcbiAgZm9yICg7IGkgPCB0YXIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3JjW2ldID4gdGFyW2ldKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRhcltpXSA+IHNyY1tpXSkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9XG4gIGlzTm9kZUxUKCc4LjYuMCcpXG4gICAgPyByZXF1aXJlKCcuL2Rpc3QvaW5kZXguanMnKVxuICAgIDogcmVxdWlyZSgnLi9saWIvaW5kZXguanMnKTtcbiIsIi8qKlxuICogQGRlc2NyaXB0aW9uIEVudW0gZm9yIGxvZyBsZXZlbHMuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGRpZmZlcmVudCBsZXZlbHMgb2YgbG9nZ2luZyBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICogQGVudW0ge3N0cmluZ31cbiAqIEBtZW1iZXJPZiBAZGVjYWYtdHMvdXRpbHNcbiAqL1xuZXhwb3J0IHZhciBMb2dMZXZlbDtcbihmdW5jdGlvbiAoTG9nTGV2ZWwpIHtcbiAgICAvKiogRXJyb3IgZXZlbnRzIHRoYXQgYXJlIGxpa2VseSB0byBjYXVzZSBwcm9ibGVtcy4gKi9cbiAgICBMb2dMZXZlbFtcImVycm9yXCJdID0gXCJlcnJvclwiO1xuICAgIC8qKiBSb3V0aW5lIGluZm9ybWF0aW9uLCBzdWNoIGFzIG9uZ29pbmcgc3RhdHVzIG9yIHBlcmZvcm1hbmNlLiAqL1xuICAgIExvZ0xldmVsW1wiaW5mb1wiXSA9IFwiaW5mb1wiO1xuICAgIC8qKiBBZGRpdGlvbmFsIHJlbGV2YW50IGluZm9ybWF0aW9uLiAqL1xuICAgIExvZ0xldmVsW1widmVyYm9zZVwiXSA9IFwidmVyYm9zZVwiO1xuICAgIC8qKiBEZWJ1ZyBvciB0cmFjZSBpbmZvcm1hdGlvbi4gKi9cbiAgICBMb2dMZXZlbFtcImRlYnVnXCJdID0gXCJkZWJ1Z1wiO1xuICAgIC8qKiB3YXkgdG9vIHZlcmJvc2Ugb3Igc2lsbHkgaW5mb3JtYXRpb24uICovXG4gICAgTG9nTGV2ZWxbXCJzaWxseVwiXSA9IFwic2lsbHlcIjtcbn0pKExvZ0xldmVsIHx8IChMb2dMZXZlbCA9IHt9KSk7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBOdW1lcmljIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggbG9nIGxldmVscy5cbiAqIEBzdW1tYXJ5IFByb3ZpZGVzIGEgbnVtZXJpYyByZXByZXNlbnRhdGlvbiBvZiBsb2cgbGV2ZWxzIGZvciBjb21wYXJpc29uIGFuZCBmaWx0ZXJpbmcuXG4gKiBAY29uc3Qge09iamVjdH0gTnVtZXJpY0xvZ0xldmVsc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGVycm9yIC0gTnVtZXJpYyB2YWx1ZSBmb3IgZXJyb3IgbGV2ZWwgKDApLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGluZm8gLSBOdW1lcmljIHZhbHVlIGZvciBpbmZvIGxldmVsICgyKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB2ZXJib3NlIC0gTnVtZXJpYyB2YWx1ZSBmb3IgdmVyYm9zZSBsZXZlbCAoNCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gZGVidWcgLSBOdW1lcmljIHZhbHVlIGZvciBkZWJ1ZyBsZXZlbCAoNSkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gc2lsbHkgLSBOdW1lcmljIHZhbHVlIGZvciBzaWxseSBsZXZlbCAoOCkuXG4gKiBAbWVtYmVyT2YgQGRlY2FmLXRzL3V0aWxzXG4gKi9cbmV4cG9ydCBjb25zdCBOdW1lcmljTG9nTGV2ZWxzID0ge1xuICAgIGVycm9yOiAyLFxuICAgIGluZm86IDQsXG4gICAgdmVyYm9zZTogNixcbiAgICBkZWJ1ZzogNyxcbiAgICBzaWxseTogOSxcbn07XG5leHBvcnQgdmFyIExvZ2dpbmdNb2RlO1xuKGZ1bmN0aW9uIChMb2dnaW5nTW9kZSkge1xuICAgIExvZ2dpbmdNb2RlW1wiUkFXXCJdID0gXCJyYXdcIjtcbiAgICBMb2dnaW5nTW9kZVtcIkpTT05cIl0gPSBcImpzb25cIjtcbn0pKExvZ2dpbmdNb2RlIHx8IChMb2dnaW5nTW9kZSA9IHt9KSk7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZhdWx0IHRoZW1lIGZvciBzdHlsaW5nIGxvZyBvdXRwdXQuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBkZWZhdWx0IGNvbG9yIGFuZCBzdHlsZSBzZXR0aW5ncyBmb3IgdmFyaW91cyBjb21wb25lbnRzIG9mIGxvZyBtZXNzYWdlcy5cbiAqIEBjb25zdCBEZWZhdWx0VGhlbWVcbiAqIEB0eXBlZGVmIHtUaGVtZX0gRGVmYXVsdFRoZW1lXG4gKiBAcHJvcGVydHkge09iamVjdH0gY2xhc3MgLSBTdHlsaW5nIGZvciBjbGFzcyBuYW1lcy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjbGFzcy5mZyAtIEZvcmVncm91bmQgY29sb3IgY29kZSBmb3IgY2xhc3MgbmFtZXMgKDQpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGlkIC0gU3R5bGluZyBmb3IgaWRlbnRpZmllcnMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gaWQuZmcgLSBGb3JlZ3JvdW5kIGNvbG9yIGNvZGUgZm9yIGlkZW50aWZpZXJzICgzNikuXG4gKiBAcHJvcGVydHkge09iamVjdH0gc3RhY2sgLSBTdHlsaW5nIGZvciBzdGFjayB0cmFjZXMgKGVtcHR5IG9iamVjdCkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gdGltZXN0YW1wIC0gU3R5bGluZyBmb3IgdGltZXN0YW1wcyAoZW1wdHkgb2JqZWN0KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBtZXNzYWdlIC0gU3R5bGluZyBmb3IgZGlmZmVyZW50IHR5cGVzIG9mIG1lc3NhZ2VzLlxuICogQHByb3BlcnR5IHtPYmplY3R9IG1lc3NhZ2UuZXJyb3IgLSBTdHlsaW5nIGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtZXNzYWdlLmVycm9yLmZnIC0gRm9yZWdyb3VuZCBjb2xvciBjb2RlIGZvciBlcnJvciBtZXNzYWdlcyAoMzQpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IG1ldGhvZCAtIFN0eWxpbmcgZm9yIG1ldGhvZCBuYW1lcyAoZW1wdHkgb2JqZWN0KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsb2dMZXZlbCAtIFN0eWxpbmcgZm9yIGRpZmZlcmVudCBsb2cgbGV2ZWxzLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGxvZ0xldmVsLmVycm9yIC0gU3R5bGluZyBmb3IgZXJyb3IgbGV2ZWwgbG9ncy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsb2dMZXZlbC5lcnJvci5mZyAtIEZvcmVncm91bmQgY29sb3IgY29kZSBmb3IgZXJyb3IgbGV2ZWwgbG9ncyAoNikuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbG9nTGV2ZWwuaW5mbyAtIFN0eWxpbmcgZm9yIGluZm8gbGV2ZWwgbG9ncyAoZW1wdHkgb2JqZWN0KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsb2dMZXZlbC52ZXJib3NlIC0gU3R5bGluZyBmb3IgdmVyYm9zZSBsZXZlbCBsb2dzIChlbXB0eSBvYmplY3QpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGxvZ0xldmVsLmRlYnVnIC0gU3R5bGluZyBmb3IgZGVidWcgbGV2ZWwgbG9ncy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsb2dMZXZlbC5kZWJ1Zy5mZyAtIEZvcmVncm91bmQgY29sb3IgY29kZSBmb3IgZGVidWcgbGV2ZWwgbG9ncyAoNykuXG4gKiBAbWVtYmVyT2YgQGRlY2FmLXRzL3V0aWxzXG4gKi9cbmV4cG9ydCBjb25zdCBEZWZhdWx0VGhlbWUgPSB7XG4gICAgY2xhc3M6IHtcbiAgICAgICAgZmc6IDM0LFxuICAgIH0sXG4gICAgaWQ6IHtcbiAgICAgICAgZmc6IDM2LFxuICAgIH0sXG4gICAgc3RhY2s6IHt9LFxuICAgIHRpbWVzdGFtcDoge30sXG4gICAgbWVzc2FnZToge1xuICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgZmc6IDMxLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgbWV0aG9kOiB7fSxcbiAgICBsb2dMZXZlbDoge1xuICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgZmc6IDMxLFxuICAgICAgICAgICAgc3R5bGU6IFtcImJvbGRcIl0sXG4gICAgICAgIH0sXG4gICAgICAgIGluZm86IHt9LFxuICAgICAgICB2ZXJib3NlOiB7fSxcbiAgICAgICAgZGVidWc6IHtcbiAgICAgICAgICAgIGZnOiAzMyxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbi8qKlxuICogQGRlc2NyaXB0aW9uIERlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgbG9nZ2luZy5cbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHRoZSBsb2dnaW5nIHN5c3RlbSwgaW5jbHVkaW5nIHZlcmJvc2l0eSwgbG9nIGxldmVsLCBzdHlsaW5nLCBhbmQgdGltZXN0YW1wIGZvcm1hdC5cbiAqIEBjb25zdCBEZWZhdWx0TG9nZ2luZ0NvbmZpZ1xuICogQHR5cGVkZWYge0xvZ2dpbmdDb25maWd9IERlZmF1bHRMb2dnaW5nQ29uZmlnXG4gKiBAcHJvcGVydHkge251bWJlcn0gdmVyYm9zZSAtIFZlcmJvc2l0eSBsZXZlbCAoMCkuXG4gKiBAcHJvcGVydHkge0xvZ0xldmVsfSBsZXZlbCAtIERlZmF1bHQgbG9nIGxldmVsIChMb2dMZXZlbC5pbmZvKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc3R5bGUgLSBXaGV0aGVyIHRvIGFwcGx5IHN0eWxpbmcgdG8gbG9nIG91dHB1dCAoZmFsc2UpLlxuICogQHByb3BlcnR5IHtib29sZWFufSB0aW1lc3RhbXAgLSBXaGV0aGVyIHRvIGluY2x1ZGUgdGltZXN0YW1wcyBpbiBsb2cgbWVzc2FnZXMgKHRydWUpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRpbWVzdGFtcEZvcm1hdCAtIEZvcm1hdCBmb3IgdGltZXN0YW1wcyAoXCJISDptbTpzcy5TU1NcIikuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGNvbnRleHQgLSBXaGV0aGVyIHRvIGluY2x1ZGUgY29udGV4dCBpbmZvcm1hdGlvbiBpbiBsb2cgbWVzc2FnZXMgKHRydWUpLlxuICogQHByb3BlcnR5IHtUaGVtZX0gdGhlbWUgLSBUaGUgdGhlbWUgdG8gdXNlIGZvciBzdHlsaW5nIGxvZyBtZXNzYWdlcyAoRGVmYXVsdFRoZW1lKS5cbiAqIEBtZW1iZXJPZiBAZGVjYWYtdHMvdXRpbHNcbiAqL1xuZXhwb3J0IGNvbnN0IERlZmF1bHRMb2dnaW5nQ29uZmlnID0ge1xuICAgIHZlcmJvc2U6IDAsXG4gICAgbGV2ZWw6IExvZ0xldmVsLmluZm8sXG4gICAgbG9nTGV2ZWw6IHRydWUsXG4gICAgbW9kZTogTG9nZ2luZ01vZGUuUkFXLFxuICAgIHN0eWxlOiBmYWxzZSxcbiAgICBzZXBhcmF0b3I6IFwiIC0gXCIsXG4gICAgdGltZXN0YW1wOiB0cnVlLFxuICAgIHRpbWVzdGFtcEZvcm1hdDogXCJISDptbTpzcy5TU1NcIixcbiAgICBjb250ZXh0OiB0cnVlLFxuICAgIHRoZW1lOiBEZWZhdWx0VGhlbWUsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTI5dWMzUmhiblJ6TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMMk52Ym5OMFlXNTBjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGRlFUczdPenM3UjBGTFJ6dEJRVU5JTEUxQlFVMHNRMEZCVGl4SlFVRlpMRkZCVjFnN1FVRllSQ3hYUVVGWkxGRkJRVkU3U1VGRGJFSXNjMFJCUVhORU8wbEJRM1JFTERKQ1FVRmxMRU5CUVVFN1NVRkRaaXhyUlVGQmEwVTdTVUZEYkVVc2VVSkJRV0VzUTBGQlFUdEpRVU5pTEhWRFFVRjFRenRKUVVOMlF5d3JRa0ZCYlVJc1EwRkJRVHRKUVVOdVFpeHJRMEZCYTBNN1NVRkRiRU1zTWtKQlFXVXNRMEZCUVR0SlFVTm1MRFJEUVVFMFF6dEpRVU0xUXl3eVFrRkJaU3hEUVVGQk8wRkJRMnBDTEVOQlFVTXNSVUZZVnl4UlFVRlJMRXRCUVZJc1VVRkJVU3hSUVZkdVFqdEJRVVZFT3pzN096czdPenM3TzBkQlZVYzdRVUZEU0N4TlFVRk5MRU5CUVVNc1RVRkJUU3huUWtGQlowSXNSMEZCUnp0SlFVTTVRaXhMUVVGTExFVkJRVVVzUTBGQlF6dEpRVU5TTEVsQlFVa3NSVUZCUlN4RFFVRkRPMGxCUTFBc1QwRkJUeXhGUVVGRkxFTkJRVU03U1VGRFZpeExRVUZMTEVWQlFVVXNRMEZCUXp0SlFVTlNMRXRCUVVzc1JVRkJSU3hEUVVGRE8wTkJRMVFzUTBGQlF6dEJRVVZHTEUxQlFVMHNRMEZCVGl4SlFVRlpMRmRCUjFnN1FVRklSQ3hYUVVGWkxGZEJRVmM3U1VGRGNrSXNNRUpCUVZjc1EwRkJRVHRKUVVOWUxEUkNRVUZoTEVOQlFVRTdRVUZEWml4RFFVRkRMRVZCU0Zjc1YwRkJWeXhMUVVGWUxGZEJRVmNzVVVGSGRFSTdRVUZGUkRzN096czdPenM3T3pzN096czdPenM3T3pzN096czdSMEYxUWtjN1FVRkRTQ3hOUVVGTkxFTkJRVU1zVFVGQlRTeFpRVUZaTEVkQlFWVTdTVUZEYWtNc1MwRkJTeXhGUVVGRk8xRkJRMHdzUlVGQlJTeEZRVUZGTEVWQlFVVTdTMEZEVUR0SlFVTkVMRVZCUVVVc1JVRkJSVHRSUVVOR0xFVkJRVVVzUlVGQlJTeEZRVUZGTzB0QlExQTdTVUZEUkN4TFFVRkxMRVZCUVVVc1JVRkJSVHRKUVVOVUxGTkJRVk1zUlVGQlJTeEZRVUZGTzBsQlEySXNUMEZCVHl4RlFVRkZPMUZCUTFBc1MwRkJTeXhGUVVGRk8xbEJRMHdzUlVGQlJTeEZRVUZGTEVWQlFVVTdVMEZEVUR0TFFVTkdPMGxCUTBRc1RVRkJUU3hGUVVGRkxFVkJRVVU3U1VGRFZpeFJRVUZSTEVWQlFVVTdVVUZEVWl4TFFVRkxMRVZCUVVVN1dVRkRUQ3hGUVVGRkxFVkJRVVVzUlVGQlJUdFpRVU5PTEV0QlFVc3NSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJRenRUUVVOb1FqdFJRVU5FTEVsQlFVa3NSVUZCUlN4RlFVRkZPMUZCUTFJc1QwRkJUeXhGUVVGRkxFVkJRVVU3VVVGRFdDeExRVUZMTEVWQlFVVTdXVUZEVEN4RlFVRkZMRVZCUVVVc1JVRkJSVHRUUVVOUU8wdEJRMFk3UTBGRFJpeERRVUZETzBGQlJVWTdPenM3T3pzN096czdPenM3UjBGaFJ6dEJRVU5JTEUxQlFVMHNRMEZCUXl4TlFVRk5MRzlDUVVGdlFpeEhRVUZyUWp0SlFVTnFSQ3hQUVVGUExFVkJRVVVzUTBGQlF6dEpRVU5XTEV0QlFVc3NSVUZCUlN4UlFVRlJMRU5CUVVNc1NVRkJTVHRKUVVOd1FpeFJRVUZSTEVWQlFVVXNTVUZCU1R0SlFVTmtMRWxCUVVrc1JVRkJSU3hYUVVGWExFTkJRVU1zUjBGQlJ6dEpRVU55UWl4TFFVRkxMRVZCUVVVc1MwRkJTenRKUVVOYUxGTkJRVk1zUlVGQlJTeExRVUZMTzBsQlEyaENMRk5CUVZNc1JVRkJSU3hKUVVGSk8wbEJRMllzWlVGQlpTeEZRVUZGTEdOQlFXTTdTVUZETDBJc1QwRkJUeXhGUVVGRkxFbEJRVWs3U1VGRFlpeExRVUZMTEVWQlFVVXNXVUZCV1R0RFFVTndRaXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIc2dURzluWjJsdVowTnZibVpwWnl3Z1ZHaGxiV1VnZlNCbWNtOXRJRndpTGk5MGVYQmxjMXdpTzF4dVhHNHZLaXBjYmlBcUlFQmtaWE5qY21sd2RHbHZiaUJGYm5WdElHWnZjaUJzYjJjZ2JHVjJaV3h6TGx4dUlDb2dRSE4xYlcxaGNua2dSR1ZtYVc1bGN5QmthV1ptWlhKbGJuUWdiR1YyWld4eklHOW1JR3h2WjJkcGJtY2dabTl5SUhSb1pTQmhjSEJzYVdOaGRHbHZiaTVjYmlBcUlFQmxiblZ0SUh0emRISnBibWQ5WEc0Z0tpQkFiV1Z0WW1WeVQyWWdRR1JsWTJGbUxYUnpMM1YwYVd4elhHNGdLaTljYm1WNGNHOXlkQ0JsYm5WdElFeHZaMHhsZG1Wc0lIdGNiaUFnTHlvcUlFVnljbTl5SUdWMlpXNTBjeUIwYUdGMElHRnlaU0JzYVd0bGJIa2dkRzhnWTJGMWMyVWdjSEp2WW14bGJYTXVJQ292WEc0Z0lHVnljbTl5SUQwZ1hDSmxjbkp2Y2x3aUxGeHVJQ0F2S2lvZ1VtOTFkR2x1WlNCcGJtWnZjbTFoZEdsdmJpd2djM1ZqYUNCaGN5QnZibWR2YVc1bklITjBZWFIxY3lCdmNpQndaWEptYjNKdFlXNWpaUzRnS2k5Y2JpQWdhVzVtYnlBOUlGd2lhVzVtYjF3aUxGeHVJQ0F2S2lvZ1FXUmthWFJwYjI1aGJDQnlaV3hsZG1GdWRDQnBibVp2Y20xaGRHbHZiaTRnS2k5Y2JpQWdkbVZ5WW05elpTQTlJRndpZG1WeVltOXpaVndpTEZ4dUlDQXZLaW9nUkdWaWRXY2diM0lnZEhKaFkyVWdhVzVtYjNKdFlYUnBiMjR1SUNvdlhHNGdJR1JsWW5WbklEMGdYQ0prWldKMVoxd2lMRnh1SUNBdktpb2dkMkY1SUhSdmJ5QjJaWEppYjNObElHOXlJSE5wYkd4NUlHbHVabTl5YldGMGFXOXVMaUFxTDF4dUlDQnphV3hzZVNBOUlGd2ljMmxzYkhsY0lpeGNibjFjYmx4dUx5b3FYRzRnS2lCQVpHVnpZM0pwY0hScGIyNGdUblZ0WlhKcFl5QjJZV3gxWlhNZ1lYTnpiMk5wWVhSbFpDQjNhWFJvSUd4dlp5QnNaWFpsYkhNdVhHNGdLaUJBYzNWdGJXRnllU0JRY205MmFXUmxjeUJoSUc1MWJXVnlhV01nY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnYkc5bklHeGxkbVZzY3lCbWIzSWdZMjl0Y0dGeWFYTnZiaUJoYm1RZ1ptbHNkR1Z5YVc1bkxseHVJQ29nUUdOdmJuTjBJSHRQWW1wbFkzUjlJRTUxYldWeWFXTk1iMmRNWlhabGJITmNiaUFxSUVCd2NtOXdaWEowZVNCN2JuVnRZbVZ5ZlNCbGNuSnZjaUF0SUU1MWJXVnlhV01nZG1Gc2RXVWdabTl5SUdWeWNtOXlJR3hsZG1Wc0lDZ3dLUzVjYmlBcUlFQndjbTl3WlhKMGVTQjdiblZ0WW1WeWZTQnBibVp2SUMwZ1RuVnRaWEpwWXlCMllXeDFaU0JtYjNJZ2FXNW1ieUJzWlhabGJDQW9NaWt1WEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMjUxYldKbGNuMGdkbVZ5WW05elpTQXRJRTUxYldWeWFXTWdkbUZzZFdVZ1ptOXlJSFpsY21KdmMyVWdiR1YyWld3Z0tEUXBMbHh1SUNvZ1FIQnliM0JsY25SNUlIdHVkVzFpWlhKOUlHUmxZblZuSUMwZ1RuVnRaWEpwWXlCMllXeDFaU0JtYjNJZ1pHVmlkV2NnYkdWMlpXd2dLRFVwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHR1ZFcxaVpYSjlJSE5wYkd4NUlDMGdUblZ0WlhKcFl5QjJZV3gxWlNCbWIzSWdjMmxzYkhrZ2JHVjJaV3dnS0RncExseHVJQ29nUUcxbGJXSmxjazltSUVCa1pXTmhaaTEwY3k5MWRHbHNjMXh1SUNvdlhHNWxlSEJ2Y25RZ1kyOXVjM1FnVG5WdFpYSnBZMHh2WjB4bGRtVnNjeUE5SUh0Y2JpQWdaWEp5YjNJNklESXNYRzRnSUdsdVptODZJRFFzWEc0Z0lIWmxjbUp2YzJVNklEWXNYRzRnSUdSbFluVm5PaUEzTEZ4dUlDQnphV3hzZVRvZ09TeGNibjA3WEc1Y2JtVjRjRzl5ZENCbGJuVnRJRXh2WjJkcGJtZE5iMlJsSUh0Y2JpQWdVa0ZYSUQwZ1hDSnlZWGRjSWl4Y2JpQWdTbE5QVGlBOUlGd2lhbk52Ymx3aUxGeHVmVnh1WEc0dktpcGNiaUFxSUVCa1pYTmpjbWx3ZEdsdmJpQkVaV1poZFd4MElIUm9aVzFsSUdadmNpQnpkSGxzYVc1bklHeHZaeUJ2ZFhSd2RYUXVYRzRnS2lCQWMzVnRiV0Z5ZVNCRVpXWnBibVZ6SUhSb1pTQmtaV1poZFd4MElHTnZiRzl5SUdGdVpDQnpkSGxzWlNCelpYUjBhVzVuY3lCbWIzSWdkbUZ5YVc5MWN5QmpiMjF3YjI1bGJuUnpJRzltSUd4dlp5QnRaWE56WVdkbGN5NWNiaUFxSUVCamIyNXpkQ0JFWldaaGRXeDBWR2hsYldWY2JpQXFJRUIwZVhCbFpHVm1JSHRVYUdWdFpYMGdSR1ZtWVhWc2RGUm9aVzFsWEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMDlpYW1WamRIMGdZMnhoYzNNZ0xTQlRkSGxzYVc1bklHWnZjaUJqYkdGemN5QnVZVzFsY3k1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3Ym5WdFltVnlmU0JqYkdGemN5NW1aeUF0SUVadmNtVm5jbTkxYm1RZ1kyOXNiM0lnWTI5a1pTQm1iM0lnWTJ4aGMzTWdibUZ0WlhNZ0tEUXBMbHh1SUNvZ1FIQnliM0JsY25SNUlIdFBZbXBsWTNSOUlHbGtJQzBnVTNSNWJHbHVaeUJtYjNJZ2FXUmxiblJwWm1sbGNuTXVYRzRnS2lCQWNISnZjR1Z5ZEhrZ2UyNTFiV0psY24wZ2FXUXVabWNnTFNCR2IzSmxaM0p2ZFc1a0lHTnZiRzl5SUdOdlpHVWdabTl5SUdsa1pXNTBhV1pwWlhKeklDZ3pOaWt1WEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMDlpYW1WamRIMGdjM1JoWTJzZ0xTQlRkSGxzYVc1bklHWnZjaUJ6ZEdGamF5QjBjbUZqWlhNZ0tHVnRjSFI1SUc5aWFtVmpkQ2t1WEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMDlpYW1WamRIMGdkR2x0WlhOMFlXMXdJQzBnVTNSNWJHbHVaeUJtYjNJZ2RHbHRaWE4wWVcxd2N5QW9aVzF3ZEhrZ2IySnFaV04wS1M1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3VDJKcVpXTjBmU0J0WlhOellXZGxJQzBnVTNSNWJHbHVaeUJtYjNJZ1pHbG1abVZ5Wlc1MElIUjVjR1Z6SUc5bUlHMWxjM05oWjJWekxseHVJQ29nUUhCeWIzQmxjblI1SUh0UFltcGxZM1I5SUcxbGMzTmhaMlV1WlhKeWIzSWdMU0JUZEhsc2FXNW5JR1p2Y2lCbGNuSnZjaUJ0WlhOellXZGxjeTVjYmlBcUlFQndjbTl3WlhKMGVTQjdiblZ0WW1WeWZTQnRaWE56WVdkbExtVnljbTl5TG1abklDMGdSbTl5WldkeWIzVnVaQ0JqYjJ4dmNpQmpiMlJsSUdadmNpQmxjbkp2Y2lCdFpYTnpZV2RsY3lBb016UXBMbHh1SUNvZ1FIQnliM0JsY25SNUlIdFBZbXBsWTNSOUlHMWxkR2h2WkNBdElGTjBlV3hwYm1jZ1ptOXlJRzFsZEdodlpDQnVZVzFsY3lBb1pXMXdkSGtnYjJKcVpXTjBLUzVjYmlBcUlFQndjbTl3WlhKMGVTQjdUMkpxWldOMGZTQnNiMmRNWlhabGJDQXRJRk4wZVd4cGJtY2dabTl5SUdScFptWmxjbVZ1ZENCc2IyY2diR1YyWld4ekxseHVJQ29nUUhCeWIzQmxjblI1SUh0UFltcGxZM1I5SUd4dloweGxkbVZzTG1WeWNtOXlJQzBnVTNSNWJHbHVaeUJtYjNJZ1pYSnliM0lnYkdWMlpXd2diRzluY3k1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3Ym5WdFltVnlmU0JzYjJkTVpYWmxiQzVsY25KdmNpNW1aeUF0SUVadmNtVm5jbTkxYm1RZ1kyOXNiM0lnWTI5a1pTQm1iM0lnWlhKeWIzSWdiR1YyWld3Z2JHOW5jeUFvTmlrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTA5aWFtVmpkSDBnYkc5blRHVjJaV3d1YVc1bWJ5QXRJRk4wZVd4cGJtY2dabTl5SUdsdVptOGdiR1YyWld3Z2JHOW5jeUFvWlcxd2RIa2diMkpxWldOMEtTNWNiaUFxSUVCd2NtOXdaWEowZVNCN1QySnFaV04wZlNCc2IyZE1aWFpsYkM1MlpYSmliM05sSUMwZ1UzUjViR2x1WnlCbWIzSWdkbVZ5WW05elpTQnNaWFpsYkNCc2IyZHpJQ2hsYlhCMGVTQnZZbXBsWTNRcExseHVJQ29nUUhCeWIzQmxjblI1SUh0UFltcGxZM1I5SUd4dloweGxkbVZzTG1SbFluVm5JQzBnVTNSNWJHbHVaeUJtYjNJZ1pHVmlkV2NnYkdWMlpXd2diRzluY3k1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3Ym5WdFltVnlmU0JzYjJkTVpYWmxiQzVrWldKMVp5NW1aeUF0SUVadmNtVm5jbTkxYm1RZ1kyOXNiM0lnWTI5a1pTQm1iM0lnWkdWaWRXY2diR1YyWld3Z2JHOW5jeUFvTnlrdVhHNGdLaUJBYldWdFltVnlUMllnUUdSbFkyRm1MWFJ6TDNWMGFXeHpYRzRnS2k5Y2JtVjRjRzl5ZENCamIyNXpkQ0JFWldaaGRXeDBWR2hsYldVNklGUm9aVzFsSUQwZ2UxeHVJQ0JqYkdGemN6b2dlMXh1SUNBZ0lHWm5PaUF6TkN4Y2JpQWdmU3hjYmlBZ2FXUTZJSHRjYmlBZ0lDQm1aem9nTXpZc1hHNGdJSDBzWEc0Z0lITjBZV05yT2lCN2ZTeGNiaUFnZEdsdFpYTjBZVzF3T2lCN2ZTeGNiaUFnYldWemMyRm5aVG9nZTF4dUlDQWdJR1Z5Y205eU9pQjdYRzRnSUNBZ0lDQm1aem9nTXpFc1hHNGdJQ0FnZlN4Y2JpQWdmU3hjYmlBZ2JXVjBhRzlrT2lCN2ZTeGNiaUFnYkc5blRHVjJaV3c2SUh0Y2JpQWdJQ0JsY25KdmNqb2dlMXh1SUNBZ0lDQWdabWM2SURNeExGeHVJQ0FnSUNBZ2MzUjViR1U2SUZ0Y0ltSnZiR1JjSWwwc1hHNGdJQ0FnZlN4Y2JpQWdJQ0JwYm1adk9pQjdmU3hjYmlBZ0lDQjJaWEppYjNObE9pQjdmU3hjYmlBZ0lDQmtaV0oxWnpvZ2UxeHVJQ0FnSUNBZ1ptYzZJRE16TEZ4dUlDQWdJSDBzWEc0Z0lIMHNYRzU5TzF4dVhHNHZLaXBjYmlBcUlFQmtaWE5qY21sd2RHbHZiaUJFWldaaGRXeDBJR052Ym1acFozVnlZWFJwYjI0Z1ptOXlJR3h2WjJkcGJtY3VYRzRnS2lCQWMzVnRiV0Z5ZVNCRVpXWnBibVZ6SUhSb1pTQmtaV1poZFd4MElITmxkSFJwYm1keklHWnZjaUIwYUdVZ2JHOW5aMmx1WnlCemVYTjBaVzBzSUdsdVkyeDFaR2x1WnlCMlpYSmliM05wZEhrc0lHeHZaeUJzWlhabGJDd2djM1I1YkdsdVp5d2dZVzVrSUhScGJXVnpkR0Z0Y0NCbWIzSnRZWFF1WEc0Z0tpQkFZMjl1YzNRZ1JHVm1ZWFZzZEV4dloyZHBibWREYjI1bWFXZGNiaUFxSUVCMGVYQmxaR1ZtSUh0TWIyZG5hVzVuUTI5dVptbG5mU0JFWldaaGRXeDBURzluWjJsdVowTnZibVpwWjF4dUlDb2dRSEJ5YjNCbGNuUjVJSHR1ZFcxaVpYSjlJSFpsY21KdmMyVWdMU0JXWlhKaWIzTnBkSGtnYkdWMlpXd2dLREFwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHRNYjJkTVpYWmxiSDBnYkdWMlpXd2dMU0JFWldaaGRXeDBJR3h2WnlCc1pYWmxiQ0FvVEc5blRHVjJaV3d1YVc1bWJ5a3VYRzRnS2lCQWNISnZjR1Z5ZEhrZ2UySnZiMnhsWVc1OUlITjBlV3hsSUMwZ1YyaGxkR2hsY2lCMGJ5QmhjSEJzZVNCemRIbHNhVzVuSUhSdklHeHZaeUJ2ZFhSd2RYUWdLR1poYkhObEtTNWNiaUFxSUVCd2NtOXdaWEowZVNCN1ltOXZiR1ZoYm4wZ2RHbHRaWE4wWVcxd0lDMGdWMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxJSFJwYldWemRHRnRjSE1nYVc0Z2JHOW5JRzFsYzNOaFoyVnpJQ2gwY25WbEtTNWNiaUFxSUVCd2NtOXdaWEowZVNCN2MzUnlhVzVuZlNCMGFXMWxjM1JoYlhCR2IzSnRZWFFnTFNCR2IzSnRZWFFnWm05eUlIUnBiV1Z6ZEdGdGNITWdLRndpU0VnNmJXMDZjM011VTFOVFhDSXBMbHh1SUNvZ1FIQnliM0JsY25SNUlIdGliMjlzWldGdWZTQmpiMjUwWlhoMElDMGdWMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxJR052Ym5SbGVIUWdhVzVtYjNKdFlYUnBiMjRnYVc0Z2JHOW5JRzFsYzNOaFoyVnpJQ2gwY25WbEtTNWNiaUFxSUVCd2NtOXdaWEowZVNCN1ZHaGxiV1Y5SUhSb1pXMWxJQzBnVkdobElIUm9aVzFsSUhSdklIVnpaU0JtYjNJZ2MzUjViR2x1WnlCc2IyY2diV1Z6YzJGblpYTWdLRVJsWm1GMWJIUlVhR1Z0WlNrdVhHNGdLaUJBYldWdFltVnlUMllnUUdSbFkyRm1MWFJ6TDNWMGFXeHpYRzRnS2k5Y2JtVjRjRzl5ZENCamIyNXpkQ0JFWldaaGRXeDBURzluWjJsdVowTnZibVpwWnpvZ1RHOW5aMmx1WjBOdmJtWnBaeUE5SUh0Y2JpQWdkbVZ5WW05elpUb2dNQ3hjYmlBZ2JHVjJaV3c2SUV4dloweGxkbVZzTG1sdVptOHNYRzRnSUd4dloweGxkbVZzT2lCMGNuVmxMRnh1SUNCdGIyUmxPaUJNYjJkbmFXNW5UVzlrWlM1U1FWY3NYRzRnSUhOMGVXeGxPaUJtWVd4elpTeGNiaUFnYzJWd1lYSmhkRzl5T2lCY0lpQXRJRndpTEZ4dUlDQjBhVzFsYzNSaGJYQTZJSFJ5ZFdVc1hHNGdJSFJwYldWemRHRnRjRVp2Y20xaGREb2dYQ0pJU0RwdGJUcHpjeTVUVTFOY0lpeGNiaUFnWTI5dWRHVjRkRG9nZEhKMVpTeGNiaUFnZEdobGJXVTZJRVJsWm1GMWJIUlVhR1Z0WlN4Y2JuMDdYRzRpWFgwPSIsIi8qKlxuICogQGRlc2NyaXB0aW9uIEFOU0kgZXNjYXBlIGNvZGUgZm9yIHJlc2V0dGluZyB0ZXh0IGZvcm1hdHRpbmcuXG4gKiBAc3VtbWFyeSBUaGlzIGNvbnN0YW50IGhvbGRzIHRoZSBBTlNJIGVzY2FwZSBzZXF1ZW5jZSB1c2VkIHRvIHJlc2V0IGFsbCB0ZXh0IGZvcm1hdHRpbmcgdG8gZGVmYXVsdC5cbiAqIEBjb25zdCBBbnNpUmVzZXRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6U3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBBbnNpUmVzZXQgPSBcIlxceDFiWzBtXCI7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBTdGFuZGFyZCBmb3JlZ3JvdW5kIGNvbG9yIGNvZGVzIGZvciBBTlNJIHRleHQgZm9ybWF0dGluZy5cbiAqIEBzdW1tYXJ5IFRoaXMgb2JqZWN0IG1hcHMgY29sb3IgbmFtZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBBTlNJIGNvbG9yIGNvZGVzIGZvciBzdGFuZGFyZCBmb3JlZ3JvdW5kIGNvbG9ycy5cbiAqIEBjb25zdCBTdGFuZGFyZEZvcmVncm91bmRDb2xvcnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBibGFjayAtIEFOU0kgY29kZSBmb3IgYmxhY2sgdGV4dCAoMzApLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHJlZCAtIEFOU0kgY29kZSBmb3IgcmVkIHRleHQgKDMxKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBncmVlbiAtIEFOU0kgY29kZSBmb3IgZ3JlZW4gdGV4dCAoMzIpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHllbGxvdyAtIEFOU0kgY29kZSBmb3IgeWVsbG93IHRleHQgKDMzKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBibHVlIC0gQU5TSSBjb2RlIGZvciBibHVlIHRleHQgKDM0KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYWdlbnRhIC0gQU5TSSBjb2RlIGZvciBtYWdlbnRhIHRleHQgKDM1KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjeWFuIC0gQU5TSSBjb2RlIGZvciBjeWFuIHRleHQgKDM2KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB3aGl0ZSAtIEFOU0kgY29kZSBmb3Igd2hpdGUgdGV4dCAoMzcpLlxuICogQG1lbWJlck9mIG1vZHVsZTpTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IFN0YW5kYXJkRm9yZWdyb3VuZENvbG9ycyA9IHtcbiAgICBibGFjazogMzAsXG4gICAgcmVkOiAzMSxcbiAgICBncmVlbjogMzIsXG4gICAgeWVsbG93OiAzMyxcbiAgICBibHVlOiAzNCxcbiAgICBtYWdlbnRhOiAzNSxcbiAgICBjeWFuOiAzNixcbiAgICB3aGl0ZTogMzcsXG59O1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gQnJpZ2h0IGZvcmVncm91bmQgY29sb3IgY29kZXMgZm9yIEFOU0kgdGV4dCBmb3JtYXR0aW5nLlxuICogQHN1bW1hcnkgVGhpcyBvYmplY3QgbWFwcyBjb2xvciBuYW1lcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIEFOU0kgY29sb3IgY29kZXMgZm9yIGJyaWdodCBmb3JlZ3JvdW5kIGNvbG9ycy5cbiAqIEBjb25zdCBCcmlnaHRGb3JlZ3JvdW5kQ29sb3JzXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmxhY2sgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCBibGFjayB0ZXh0ICg5MCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gcmVkIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgcmVkIHRleHQgKDkxKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBncmVlbiAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IGdyZWVuIHRleHQgKDkyKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB5ZWxsb3cgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCB5ZWxsb3cgdGV4dCAoOTMpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJsdWUgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCBibHVlIHRleHQgKDk0KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYWdlbnRhIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgbWFnZW50YSB0ZXh0ICg5NSkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gY3lhbiAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IGN5YW4gdGV4dCAoOTYpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdoaXRlIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgd2hpdGUgdGV4dCAoOTcpLlxuICogQG1lbWJlck9mIG1vZHVsZTpAU3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBCcmlnaHRGb3JlZ3JvdW5kQ29sb3JzID0ge1xuICAgIGJyaWdodEJsYWNrOiA5MCxcbiAgICBicmlnaHRSZWQ6IDkxLFxuICAgIGJyaWdodEdyZWVuOiA5MixcbiAgICBicmlnaHRZZWxsb3c6IDkzLFxuICAgIGJyaWdodEJsdWU6IDk0LFxuICAgIGJyaWdodE1hZ2VudGE6IDk1LFxuICAgIGJyaWdodEN5YW46IDk2LFxuICAgIGJyaWdodFdoaXRlOiA5Nyxcbn07XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBTdGFuZGFyZCBiYWNrZ3JvdW5kIGNvbG9yIGNvZGVzIGZvciBBTlNJIHRleHQgZm9ybWF0dGluZy5cbiAqIEBzdW1tYXJ5IFRoaXMgb2JqZWN0IG1hcHMgY29sb3IgbmFtZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBBTlNJIGNvbG9yIGNvZGVzIGZvciBzdGFuZGFyZCBiYWNrZ3JvdW5kIGNvbG9ycy5cbiAqIEBjb25zdCBTdGFuZGFyZEJhY2tncm91bmRDb2xvcnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0JsYWNrIC0gQU5TSSBjb2RlIGZvciBibGFjayBiYWNrZ3JvdW5kICg0MCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdSZWQgLSBBTlNJIGNvZGUgZm9yIHJlZCBiYWNrZ3JvdW5kICg0MSkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdHcmVlbiAtIEFOU0kgY29kZSBmb3IgZ3JlZW4gYmFja2dyb3VuZCAoNDIpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnWWVsbG93IC0gQU5TSSBjb2RlIGZvciB5ZWxsb3cgYmFja2dyb3VuZCAoNDMpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnQmx1ZSAtIEFOU0kgY29kZSBmb3IgYmx1ZSBiYWNrZ3JvdW5kICg0NCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdNYWdlbnRhIC0gQU5TSSBjb2RlIGZvciBtYWdlbnRhIGJhY2tncm91bmQgKDQ1KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0N5YW4gLSBBTlNJIGNvZGUgZm9yIGN5YW4gYmFja2dyb3VuZCAoNDYpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnV2hpdGUgLSBBTlNJIGNvZGUgZm9yIHdoaXRlIGJhY2tncm91bmQgKDQ3KS5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6QFN0eWxlZFN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgU3RhbmRhcmRCYWNrZ3JvdW5kQ29sb3JzID0ge1xuICAgIGJnQmxhY2s6IDQwLFxuICAgIGJnUmVkOiA0MSxcbiAgICBiZ0dyZWVuOiA0MixcbiAgICBiZ1llbGxvdzogNDMsXG4gICAgYmdCbHVlOiA0NCxcbiAgICBiZ01hZ2VudGE6IDQ1LFxuICAgIGJnQ3lhbjogNDYsXG4gICAgYmdXaGl0ZTogNDcsXG59O1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gQnJpZ2h0IGJhY2tncm91bmQgY29sb3IgY29kZXMgZm9yIEFOU0kgdGV4dCBmb3JtYXR0aW5nLlxuICogQHN1bW1hcnkgVGhpcyBvYmplY3QgbWFwcyBjb2xvciBuYW1lcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIEFOU0kgY29sb3IgY29kZXMgZm9yIGJyaWdodCBiYWNrZ3JvdW5kIGNvbG9ycy5cbiAqIEBjb25zdCBCcmlnaHRCYWNrZ3JvdW5kQ29sb3JzXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdCcmlnaHRCbGFjayAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IGJsYWNrIGJhY2tncm91bmQgKDEwMCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdCcmlnaHRSZWQgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCByZWQgYmFja2dyb3VuZCAoMTAxKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0JyaWdodEdyZWVuIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgZ3JlZW4gYmFja2dyb3VuZCAoMTAyKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0JyaWdodFllbGxvdyAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IHllbGxvdyBiYWNrZ3JvdW5kICgxMDMpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnQnJpZ2h0Qmx1ZSAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IGJsdWUgYmFja2dyb3VuZCAoMTA0KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0JyaWdodE1hZ2VudGEgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCBtYWdlbnRhIGJhY2tncm91bmQgKDEwNSkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdCcmlnaHRDeWFuIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgY3lhbiBiYWNrZ3JvdW5kICgxMDYpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnQnJpZ2h0V2hpdGUgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCB3aGl0ZSBiYWNrZ3JvdW5kICgxMDcpLlxuICogQG1lbWJlck9mIG1vZHVsZTpAU3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBCcmlnaHRCYWNrZ3JvdW5kQ29sb3JzID0ge1xuICAgIGJnQnJpZ2h0QmxhY2s6IDEwMCxcbiAgICBiZ0JyaWdodFJlZDogMTAxLFxuICAgIGJnQnJpZ2h0R3JlZW46IDEwMixcbiAgICBiZ0JyaWdodFllbGxvdzogMTAzLFxuICAgIGJnQnJpZ2h0Qmx1ZTogMTA0LFxuICAgIGJnQnJpZ2h0TWFnZW50YTogMTA1LFxuICAgIGJnQnJpZ2h0Q3lhbjogMTA2LFxuICAgIGJnQnJpZ2h0V2hpdGU6IDEwNyxcbn07XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUZXh0IHN0eWxlIGNvZGVzIGZvciBBTlNJIHRleHQgZm9ybWF0dGluZy5cbiAqIEBzdW1tYXJ5IFRoaXMgb2JqZWN0IG1hcHMgc3R5bGUgbmFtZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBBTlNJIGNvZGVzIGZvciB2YXJpb3VzIHRleHQgc3R5bGVzLlxuICogQGNvbnN0IHN0eWxlc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHJlc2V0IC0gQU5TSSBjb2RlIHRvIHJlc2V0IGFsbCBzdHlsZXMgKDApLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJvbGQgLSBBTlNJIGNvZGUgZm9yIGJvbGQgdGV4dCAoMSkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gZGltIC0gQU5TSSBjb2RlIGZvciBkaW0gdGV4dCAoMikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gaXRhbGljIC0gQU5TSSBjb2RlIGZvciBpdGFsaWMgdGV4dCAoMykuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdW5kZXJsaW5lIC0gQU5TSSBjb2RlIGZvciB1bmRlcmxpbmVkIHRleHQgKDQpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJsaW5rIC0gQU5TSSBjb2RlIGZvciBibGlua2luZyB0ZXh0ICg1KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpbnZlcnNlIC0gQU5TSSBjb2RlIGZvciBpbnZlcnNlIGNvbG9ycyAoNykuXG4gKiBAcHJvcGVydHkge251bWJlcn0gaGlkZGVuIC0gQU5TSSBjb2RlIGZvciBoaWRkZW4gdGV4dCAoOCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gc3RyaWtldGhyb3VnaCAtIEFOU0kgY29kZSBmb3Igc3RyaWtldGhyb3VnaCB0ZXh0ICg5KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkb3VibGVVbmRlcmxpbmUgLSBBTlNJIGNvZGUgZm9yIGRvdWJsZSB1bmRlcmxpbmVkIHRleHQgKDIxKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBub3JtYWxDb2xvciAtIEFOU0kgY29kZSB0byByZXNldCBjb2xvciB0byBub3JtYWwgKDIyKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBub0l0YWxpY09yRnJha3R1ciAtIEFOU0kgY29kZSB0byB0dXJuIG9mZiBpdGFsaWMgKDIzKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBub1VuZGVybGluZSAtIEFOU0kgY29kZSB0byB0dXJuIG9mZiB1bmRlcmxpbmUgKDI0KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBub0JsaW5rIC0gQU5TSSBjb2RlIHRvIHR1cm4gb2ZmIGJsaW5rICgyNSkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gbm9JbnZlcnNlIC0gQU5TSSBjb2RlIHRvIHR1cm4gb2ZmIGludmVyc2UgKDI3KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBub0hpZGRlbiAtIEFOU0kgY29kZSB0byB0dXJuIG9mZiBoaWRkZW4gKDI4KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBub1N0cmlrZXRocm91Z2ggLSBBTlNJIGNvZGUgdG8gdHVybiBvZmYgc3RyaWtldGhyb3VnaCAoMjkpLlxuICogQG1lbWJlck9mIG1vZHVsZTpAU3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBzdHlsZXMgPSB7XG4gICAgcmVzZXQ6IDAsXG4gICAgYm9sZDogMSxcbiAgICBkaW06IDIsXG4gICAgaXRhbGljOiAzLFxuICAgIHVuZGVybGluZTogNCxcbiAgICBibGluazogNSxcbiAgICBpbnZlcnNlOiA3LFxuICAgIGhpZGRlbjogOCxcbiAgICBzdHJpa2V0aHJvdWdoOiA5LFxuICAgIGRvdWJsZVVuZGVybGluZTogMjEsXG4gICAgbm9ybWFsQ29sb3I6IDIyLFxuICAgIG5vSXRhbGljT3JGcmFrdHVyOiAyMyxcbiAgICBub1VuZGVybGluZTogMjQsXG4gICAgbm9CbGluazogMjUsXG4gICAgbm9JbnZlcnNlOiAyNyxcbiAgICBub0hpZGRlbjogMjgsXG4gICAgbm9TdHJpa2V0aHJvdWdoOiAyOSxcbn07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zjg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW5OeVl5OWpiMjV6ZEdGdWRITXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCUTBFN096czdPMGRCUzBjN1FVRkRTQ3hOUVVGTkxFTkJRVU1zVFVGQlRTeFRRVUZUTEVkQlFVY3NVMEZCVXl4RFFVRkRPMEZCUlc1RE96czdPenM3T3pzN096czdPMGRCWVVjN1FVRkRTQ3hOUVVGTkxFTkJRVU1zVFVGQlRTeDNRa0ZCZDBJc1IwRkJSenRKUVVOMFF5eExRVUZMTEVWQlFVVXNSVUZCUlR0SlFVTlVMRWRCUVVjc1JVRkJSU3hGUVVGRk8wbEJRMUFzUzBGQlN5eEZRVUZGTEVWQlFVVTdTVUZEVkN4TlFVRk5MRVZCUVVVc1JVRkJSVHRKUVVOV0xFbEJRVWtzUlVGQlJTeEZRVUZGTzBsQlExSXNUMEZCVHl4RlFVRkZMRVZCUVVVN1NVRkRXQ3hKUVVGSkxFVkJRVVVzUlVGQlJUdEpRVU5TTEV0QlFVc3NSVUZCUlN4RlFVRkZPME5CUTFZc1EwRkJRenRCUVVWR096czdPenM3T3pzN096czdPMGRCWVVjN1FVRkRTQ3hOUVVGTkxFTkJRVU1zVFVGQlRTeHpRa0ZCYzBJc1IwRkJSenRKUVVOd1F5eFhRVUZYTEVWQlFVVXNSVUZCUlR0SlFVTm1MRk5CUVZNc1JVRkJSU3hGUVVGRk8wbEJRMklzVjBGQlZ5eEZRVUZGTEVWQlFVVTdTVUZEWml4WlFVRlpMRVZCUVVVc1JVRkJSVHRKUVVOb1FpeFZRVUZWTEVWQlFVVXNSVUZCUlR0SlFVTmtMR0ZCUVdFc1JVRkJSU3hGUVVGRk8wbEJRMnBDTEZWQlFWVXNSVUZCUlN4RlFVRkZPMGxCUTJRc1YwRkJWeXhGUVVGRkxFVkJRVVU3UTBGRGFFSXNRMEZCUXp0QlFVVkdPenM3T3pzN096czdPenM3TzBkQllVYzdRVUZEU0N4TlFVRk5MRU5CUVVNc1RVRkJUU3gzUWtGQmQwSXNSMEZCUnp0SlFVTjBReXhQUVVGUExFVkJRVVVzUlVGQlJUdEpRVU5ZTEV0QlFVc3NSVUZCUlN4RlFVRkZPMGxCUTFRc1QwRkJUeXhGUVVGRkxFVkJRVVU3U1VGRFdDeFJRVUZSTEVWQlFVVXNSVUZCUlR0SlFVTmFMRTFCUVUwc1JVRkJSU3hGUVVGRk8wbEJRMVlzVTBGQlV5eEZRVUZGTEVWQlFVVTdTVUZEWWl4TlFVRk5MRVZCUVVVc1JVRkJSVHRKUVVOV0xFOUJRVThzUlVGQlJTeEZRVUZGTzBOQlExb3NRMEZCUXp0QlFVVkdPenM3T3pzN096czdPenM3TzBkQllVYzdRVUZEU0N4TlFVRk5MRU5CUVVNc1RVRkJUU3h6UWtGQmMwSXNSMEZCUnp0SlFVTndReXhoUVVGaExFVkJRVVVzUjBGQlJ6dEpRVU5zUWl4WFFVRlhMRVZCUVVVc1IwRkJSenRKUVVOb1FpeGhRVUZoTEVWQlFVVXNSMEZCUnp0SlFVTnNRaXhqUVVGakxFVkJRVVVzUjBGQlJ6dEpRVU51UWl4WlFVRlpMRVZCUVVVc1IwRkJSenRKUVVOcVFpeGxRVUZsTEVWQlFVVXNSMEZCUnp0SlFVTndRaXhaUVVGWkxFVkJRVVVzUjBGQlJ6dEpRVU5xUWl4aFFVRmhMRVZCUVVVc1IwRkJSenREUVVOdVFpeERRVUZETzBGQlJVWTdPenM3T3pzN096czdPenM3T3pzN096czdPenM3UjBGelFrYzdRVUZEU0N4TlFVRk5MRU5CUVVNc1RVRkJUU3hOUVVGTkxFZEJRVWM3U1VGRGNFSXNTMEZCU3l4RlFVRkZMRU5CUVVNN1NVRkRVaXhKUVVGSkxFVkJRVVVzUTBGQlF6dEpRVU5RTEVkQlFVY3NSVUZCUlN4RFFVRkRPMGxCUTA0c1RVRkJUU3hGUVVGRkxFTkJRVU03U1VGRFZDeFRRVUZUTEVWQlFVVXNRMEZCUXp0SlFVTmFMRXRCUVVzc1JVRkJSU3hEUVVGRE8wbEJRMUlzVDBGQlR5eEZRVUZGTEVOQlFVTTdTVUZEVml4TlFVRk5MRVZCUVVVc1EwRkJRenRKUVVOVUxHRkJRV0VzUlVGQlJTeERRVUZETzBsQlEyaENMR1ZCUVdVc1JVRkJSU3hGUVVGRk8wbEJRMjVDTEZkQlFWY3NSVUZCUlN4RlFVRkZPMGxCUTJZc2FVSkJRV2xDTEVWQlFVVXNSVUZCUlR0SlFVTnlRaXhYUVVGWExFVkJRVVVzUlVGQlJUdEpRVU5tTEU5QlFVOHNSVUZCUlN4RlFVRkZPMGxCUTFnc1UwRkJVeXhGUVVGRkxFVkJRVVU3U1VGRFlpeFJRVUZSTEVWQlFVVXNSVUZCUlR0SlFVTmFMR1ZCUVdVc1JVRkJSU3hGUVVGRk8wTkJRM0JDTEVOQlFVTWlMQ0ptYVd4bElqb2lZMjl1YzNSaGJuUnpMbXB6SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaVhHNHZLaXBjYmlBcUlFQmtaWE5qY21sd2RHbHZiaUJCVGxOSklHVnpZMkZ3WlNCamIyUmxJR1p2Y2lCeVpYTmxkSFJwYm1jZ2RHVjRkQ0JtYjNKdFlYUjBhVzVuTGx4dUlDb2dRSE4xYlcxaGNua2dWR2hwY3lCamIyNXpkR0Z1ZENCb2IyeGtjeUIwYUdVZ1FVNVRTU0JsYzJOaGNHVWdjMlZ4ZFdWdVkyVWdkWE5sWkNCMGJ5QnlaWE5sZENCaGJHd2dkR1Y0ZENCbWIzSnRZWFIwYVc1bklIUnZJR1JsWm1GMWJIUXVYRzRnS2lCQVkyOXVjM1FnUVc1emFWSmxjMlYwWEc0Z0tpQkFiV1Z0WW1WeVQyWWdiVzlrZFd4bE9sTjBlV3hsWkZOMGNtbHVaMXh1SUNvdlhHNWxlSEJ2Y25RZ1kyOXVjM1FnUVc1emFWSmxjMlYwSUQwZ1hDSmNYSGd4WWxzd2JWd2lPMXh1WEc0dktpcGNiaUFxSUVCa1pYTmpjbWx3ZEdsdmJpQlRkR0Z1WkdGeVpDQm1iM0psWjNKdmRXNWtJR052Ykc5eUlHTnZaR1Z6SUdadmNpQkJUbE5KSUhSbGVIUWdabTl5YldGMGRHbHVaeTVjYmlBcUlFQnpkVzF0WVhKNUlGUm9hWE1nYjJKcVpXTjBJRzFoY0hNZ1kyOXNiM0lnYm1GdFpYTWdkRzhnZEdobGFYSWdZMjl5Y21WemNHOXVaR2x1WnlCQlRsTkpJR052Ykc5eUlHTnZaR1Z6SUdadmNpQnpkR0Z1WkdGeVpDQm1iM0psWjNKdmRXNWtJR052Ykc5eWN5NWNiaUFxSUVCamIyNXpkQ0JUZEdGdVpHRnlaRVp2Y21WbmNtOTFibVJEYjJ4dmNuTmNiaUFxSUVCd2NtOXdaWEowZVNCN2JuVnRZbVZ5ZlNCaWJHRmpheUF0SUVGT1Uwa2dZMjlrWlNCbWIzSWdZbXhoWTJzZ2RHVjRkQ0FvTXpBcExseHVJQ29nUUhCeWIzQmxjblI1SUh0dWRXMWlaWEo5SUhKbFpDQXRJRUZPVTBrZ1kyOWtaU0JtYjNJZ2NtVmtJSFJsZUhRZ0tETXhLUzVjYmlBcUlFQndjbTl3WlhKMGVTQjdiblZ0WW1WeWZTQm5jbVZsYmlBdElFRk9VMGtnWTI5a1pTQm1iM0lnWjNKbFpXNGdkR1Y0ZENBb016SXBMbHh1SUNvZ1FIQnliM0JsY25SNUlIdHVkVzFpWlhKOUlIbGxiR3h2ZHlBdElFRk9VMGtnWTI5a1pTQm1iM0lnZVdWc2JHOTNJSFJsZUhRZ0tETXpLUzVjYmlBcUlFQndjbTl3WlhKMGVTQjdiblZ0WW1WeWZTQmliSFZsSUMwZ1FVNVRTU0JqYjJSbElHWnZjaUJpYkhWbElIUmxlSFFnS0RNMEtTNWNiaUFxSUVCd2NtOXdaWEowZVNCN2JuVnRZbVZ5ZlNCdFlXZGxiblJoSUMwZ1FVNVRTU0JqYjJSbElHWnZjaUJ0WVdkbGJuUmhJSFJsZUhRZ0tETTFLUzVjYmlBcUlFQndjbTl3WlhKMGVTQjdiblZ0WW1WeWZTQmplV0Z1SUMwZ1FVNVRTU0JqYjJSbElHWnZjaUJqZVdGdUlIUmxlSFFnS0RNMktTNWNiaUFxSUVCd2NtOXdaWEowZVNCN2JuVnRZbVZ5ZlNCM2FHbDBaU0F0SUVGT1Uwa2dZMjlrWlNCbWIzSWdkMmhwZEdVZ2RHVjRkQ0FvTXpjcExseHVJQ29nUUcxbGJXSmxjazltSUcxdlpIVnNaVHBUZEhsc1pXUlRkSEpwYm1kY2JpQXFMMXh1Wlhod2IzSjBJR052Ym5OMElGTjBZVzVrWVhKa1JtOXlaV2R5YjNWdVpFTnZiRzl5Y3lBOUlIdGNiaUFnWW14aFkyczZJRE13TEZ4dUlDQnlaV1E2SURNeExGeHVJQ0JuY21WbGJqb2dNeklzWEc0Z0lIbGxiR3h2ZHpvZ016TXNYRzRnSUdKc2RXVTZJRE0wTEZ4dUlDQnRZV2RsYm5SaE9pQXpOU3hjYmlBZ1kzbGhiam9nTXpZc1hHNGdJSGRvYVhSbE9pQXpOeXhjYm4wN1hHNWNiaThxS2x4dUlDb2dRR1JsYzJOeWFYQjBhVzl1SUVKeWFXZG9kQ0JtYjNKbFozSnZkVzVrSUdOdmJHOXlJR052WkdWeklHWnZjaUJCVGxOSklIUmxlSFFnWm05eWJXRjBkR2x1Wnk1Y2JpQXFJRUJ6ZFcxdFlYSjVJRlJvYVhNZ2IySnFaV04wSUcxaGNITWdZMjlzYjNJZ2JtRnRaWE1nZEc4Z2RHaGxhWElnWTI5eWNtVnpjRzl1WkdsdVp5QkJUbE5KSUdOdmJHOXlJR052WkdWeklHWnZjaUJpY21sbmFIUWdabTl5WldkeWIzVnVaQ0JqYjJ4dmNuTXVYRzRnS2lCQVkyOXVjM1FnUW5KcFoyaDBSbTl5WldkeWIzVnVaRU52Ykc5eWMxeHVJQ29nUUhCeWIzQmxjblI1SUh0dWRXMWlaWEo5SUdKc1lXTnJJQzBnUVU1VFNTQmpiMlJsSUdadmNpQmljbWxuYUhRZ1lteGhZMnNnZEdWNGRDQW9PVEFwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHR1ZFcxaVpYSjlJSEpsWkNBdElFRk9VMGtnWTI5a1pTQm1iM0lnWW5KcFoyaDBJSEpsWkNCMFpYaDBJQ2c1TVNrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTI1MWJXSmxjbjBnWjNKbFpXNGdMU0JCVGxOSklHTnZaR1VnWm05eUlHSnlhV2RvZENCbmNtVmxiaUIwWlhoMElDZzVNaWt1WEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMjUxYldKbGNuMGdlV1ZzYkc5M0lDMGdRVTVUU1NCamIyUmxJR1p2Y2lCaWNtbG5hSFFnZVdWc2JHOTNJSFJsZUhRZ0tEa3pLUzVjYmlBcUlFQndjbTl3WlhKMGVTQjdiblZ0WW1WeWZTQmliSFZsSUMwZ1FVNVRTU0JqYjJSbElHWnZjaUJpY21sbmFIUWdZbXgxWlNCMFpYaDBJQ2c1TkNrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTI1MWJXSmxjbjBnYldGblpXNTBZU0F0SUVGT1Uwa2dZMjlrWlNCbWIzSWdZbkpwWjJoMElHMWhaMlZ1ZEdFZ2RHVjRkQ0FvT1RVcExseHVJQ29nUUhCeWIzQmxjblI1SUh0dWRXMWlaWEo5SUdONVlXNGdMU0JCVGxOSklHTnZaR1VnWm05eUlHSnlhV2RvZENCamVXRnVJSFJsZUhRZ0tEazJLUzVjYmlBcUlFQndjbTl3WlhKMGVTQjdiblZ0WW1WeWZTQjNhR2wwWlNBdElFRk9VMGtnWTI5a1pTQm1iM0lnWW5KcFoyaDBJSGRvYVhSbElIUmxlSFFnS0RrM0tTNWNiaUFxSUVCdFpXMWlaWEpQWmlCdGIyUjFiR1U2UUZOMGVXeGxaRk4wY21sdVoxeHVJQ292WEc1bGVIQnZjblFnWTI5dWMzUWdRbkpwWjJoMFJtOXlaV2R5YjNWdVpFTnZiRzl5Y3lBOUlIdGNiaUFnWW5KcFoyaDBRbXhoWTJzNklEa3dMRnh1SUNCaWNtbG5hSFJTWldRNklEa3hMRnh1SUNCaWNtbG5hSFJIY21WbGJqb2dPVElzWEc0Z0lHSnlhV2RvZEZsbGJHeHZkem9nT1RNc1hHNGdJR0p5YVdkb2RFSnNkV1U2SURrMExGeHVJQ0JpY21sbmFIUk5ZV2RsYm5SaE9pQTVOU3hjYmlBZ1luSnBaMmgwUTNsaGJqb2dPVFlzWEc0Z0lHSnlhV2RvZEZkb2FYUmxPaUE1Tnl4Y2JuMDdYRzVjYmk4cUtseHVJQ29nUUdSbGMyTnlhWEIwYVc5dUlGTjBZVzVrWVhKa0lHSmhZMnRuY205MWJtUWdZMjlzYjNJZ1kyOWtaWE1nWm05eUlFRk9VMGtnZEdWNGRDQm1iM0p0WVhSMGFXNW5MbHh1SUNvZ1FITjFiVzFoY25rZ1ZHaHBjeUJ2WW1wbFkzUWdiV0Z3Y3lCamIyeHZjaUJ1WVcxbGN5QjBieUIwYUdWcGNpQmpiM0p5WlhOd2IyNWthVzVuSUVGT1Uwa2dZMjlzYjNJZ1kyOWtaWE1nWm05eUlITjBZVzVrWVhKa0lHSmhZMnRuY205MWJtUWdZMjlzYjNKekxseHVJQ29nUUdOdmJuTjBJRk4wWVc1a1lYSmtRbUZqYTJkeWIzVnVaRU52Ykc5eWMxeHVJQ29nUUhCeWIzQmxjblI1SUh0dWRXMWlaWEo5SUdKblFteGhZMnNnTFNCQlRsTkpJR052WkdVZ1ptOXlJR0pzWVdOcklHSmhZMnRuY205MWJtUWdLRFF3S1M1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3Ym5WdFltVnlmU0JpWjFKbFpDQXRJRUZPVTBrZ1kyOWtaU0JtYjNJZ2NtVmtJR0poWTJ0bmNtOTFibVFnS0RReEtTNWNiaUFxSUVCd2NtOXdaWEowZVNCN2JuVnRZbVZ5ZlNCaVowZHlaV1Z1SUMwZ1FVNVRTU0JqYjJSbElHWnZjaUJuY21WbGJpQmlZV05yWjNKdmRXNWtJQ2cwTWlrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTI1MWJXSmxjbjBnWW1kWlpXeHNiM2NnTFNCQlRsTkpJR052WkdVZ1ptOXlJSGxsYkd4dmR5QmlZV05yWjNKdmRXNWtJQ2cwTXlrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTI1MWJXSmxjbjBnWW1kQ2JIVmxJQzBnUVU1VFNTQmpiMlJsSUdadmNpQmliSFZsSUdKaFkydG5jbTkxYm1RZ0tEUTBLUzVjYmlBcUlFQndjbTl3WlhKMGVTQjdiblZ0WW1WeWZTQmlaMDFoWjJWdWRHRWdMU0JCVGxOSklHTnZaR1VnWm05eUlHMWhaMlZ1ZEdFZ1ltRmphMmR5YjNWdVpDQW9ORFVwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHR1ZFcxaVpYSjlJR0puUTNsaGJpQXRJRUZPVTBrZ1kyOWtaU0JtYjNJZ1kzbGhiaUJpWVdOclozSnZkVzVrSUNnME5pa3VYRzRnS2lCQWNISnZjR1Z5ZEhrZ2UyNTFiV0psY24wZ1ltZFhhR2wwWlNBdElFRk9VMGtnWTI5a1pTQm1iM0lnZDJocGRHVWdZbUZqYTJkeWIzVnVaQ0FvTkRjcExseHVJQ29nUUcxbGJXSmxjazltSUcxdlpIVnNaVHBBVTNSNWJHVmtVM1J5YVc1blhHNGdLaTljYm1WNGNHOXlkQ0JqYjI1emRDQlRkR0Z1WkdGeVpFSmhZMnRuY205MWJtUkRiMnh2Y25NZ1BTQjdYRzRnSUdKblFteGhZMnM2SURRd0xGeHVJQ0JpWjFKbFpEb2dOREVzWEc0Z0lHSm5SM0psWlc0NklEUXlMRnh1SUNCaVoxbGxiR3h2ZHpvZ05ETXNYRzRnSUdKblFteDFaVG9nTkRRc1hHNGdJR0puVFdGblpXNTBZVG9nTkRVc1hHNGdJR0puUTNsaGJqb2dORFlzWEc0Z0lHSm5WMmhwZEdVNklEUTNMRnh1ZlR0Y2JseHVMeW9xWEc0Z0tpQkFaR1Z6WTNKcGNIUnBiMjRnUW5KcFoyaDBJR0poWTJ0bmNtOTFibVFnWTI5c2IzSWdZMjlrWlhNZ1ptOXlJRUZPVTBrZ2RHVjRkQ0JtYjNKdFlYUjBhVzVuTGx4dUlDb2dRSE4xYlcxaGNua2dWR2hwY3lCdlltcGxZM1FnYldGd2N5QmpiMnh2Y2lCdVlXMWxjeUIwYnlCMGFHVnBjaUJqYjNKeVpYTndiMjVrYVc1bklFRk9VMGtnWTI5c2IzSWdZMjlrWlhNZ1ptOXlJR0p5YVdkb2RDQmlZV05yWjNKdmRXNWtJR052Ykc5eWN5NWNiaUFxSUVCamIyNXpkQ0JDY21sbmFIUkNZV05yWjNKdmRXNWtRMjlzYjNKelhHNGdLaUJBY0hKdmNHVnlkSGtnZTI1MWJXSmxjbjBnWW1kQ2NtbG5hSFJDYkdGamF5QXRJRUZPVTBrZ1kyOWtaU0JtYjNJZ1luSnBaMmgwSUdKc1lXTnJJR0poWTJ0bmNtOTFibVFnS0RFd01Da3VYRzRnS2lCQWNISnZjR1Z5ZEhrZ2UyNTFiV0psY24wZ1ltZENjbWxuYUhSU1pXUWdMU0JCVGxOSklHTnZaR1VnWm05eUlHSnlhV2RvZENCeVpXUWdZbUZqYTJkeWIzVnVaQ0FvTVRBeEtTNWNiaUFxSUVCd2NtOXdaWEowZVNCN2JuVnRZbVZ5ZlNCaVowSnlhV2RvZEVkeVpXVnVJQzBnUVU1VFNTQmpiMlJsSUdadmNpQmljbWxuYUhRZ1ozSmxaVzRnWW1GamEyZHliM1Z1WkNBb01UQXlLUzVjYmlBcUlFQndjbTl3WlhKMGVTQjdiblZ0WW1WeWZTQmlaMEp5YVdkb2RGbGxiR3h2ZHlBdElFRk9VMGtnWTI5a1pTQm1iM0lnWW5KcFoyaDBJSGxsYkd4dmR5QmlZV05yWjNKdmRXNWtJQ2d4TURNcExseHVJQ29nUUhCeWIzQmxjblI1SUh0dWRXMWlaWEo5SUdKblFuSnBaMmgwUW14MVpTQXRJRUZPVTBrZ1kyOWtaU0JtYjNJZ1luSnBaMmgwSUdKc2RXVWdZbUZqYTJkeWIzVnVaQ0FvTVRBMEtTNWNiaUFxSUVCd2NtOXdaWEowZVNCN2JuVnRZbVZ5ZlNCaVowSnlhV2RvZEUxaFoyVnVkR0VnTFNCQlRsTkpJR052WkdVZ1ptOXlJR0p5YVdkb2RDQnRZV2RsYm5SaElHSmhZMnRuY205MWJtUWdLREV3TlNrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTI1MWJXSmxjbjBnWW1kQ2NtbG5hSFJEZVdGdUlDMGdRVTVUU1NCamIyUmxJR1p2Y2lCaWNtbG5hSFFnWTNsaGJpQmlZV05yWjNKdmRXNWtJQ2d4TURZcExseHVJQ29nUUhCeWIzQmxjblI1SUh0dWRXMWlaWEo5SUdKblFuSnBaMmgwVjJocGRHVWdMU0JCVGxOSklHTnZaR1VnWm05eUlHSnlhV2RvZENCM2FHbDBaU0JpWVdOclozSnZkVzVrSUNneE1EY3BMbHh1SUNvZ1FHMWxiV0psY2s5bUlHMXZaSFZzWlRwQVUzUjViR1ZrVTNSeWFXNW5YRzRnS2k5Y2JtVjRjRzl5ZENCamIyNXpkQ0JDY21sbmFIUkNZV05yWjNKdmRXNWtRMjlzYjNKeklEMGdlMXh1SUNCaVowSnlhV2RvZEVKc1lXTnJPaUF4TURBc1hHNGdJR0puUW5KcFoyaDBVbVZrT2lBeE1ERXNYRzRnSUdKblFuSnBaMmgwUjNKbFpXNDZJREV3TWl4Y2JpQWdZbWRDY21sbmFIUlpaV3hzYjNjNklERXdNeXhjYmlBZ1ltZENjbWxuYUhSQ2JIVmxPaUF4TURRc1hHNGdJR0puUW5KcFoyaDBUV0ZuWlc1MFlUb2dNVEExTEZ4dUlDQmlaMEp5YVdkb2RFTjVZVzQ2SURFd05peGNiaUFnWW1kQ2NtbG5hSFJYYUdsMFpUb2dNVEEzTEZ4dWZUdGNibHh1THlvcVhHNGdLaUJBWkdWelkzSnBjSFJwYjI0Z1ZHVjRkQ0J6ZEhsc1pTQmpiMlJsY3lCbWIzSWdRVTVUU1NCMFpYaDBJR1p2Y20xaGRIUnBibWN1WEc0Z0tpQkFjM1Z0YldGeWVTQlVhR2x6SUc5aWFtVmpkQ0J0WVhCeklITjBlV3hsSUc1aGJXVnpJSFJ2SUhSb1pXbHlJR052Y25KbGMzQnZibVJwYm1jZ1FVNVRTU0JqYjJSbGN5Qm1iM0lnZG1GeWFXOTFjeUIwWlhoMElITjBlV3hsY3k1Y2JpQXFJRUJqYjI1emRDQnpkSGxzWlhOY2JpQXFJRUJ3Y205d1pYSjBlU0I3Ym5WdFltVnlmU0J5WlhObGRDQXRJRUZPVTBrZ1kyOWtaU0IwYnlCeVpYTmxkQ0JoYkd3Z2MzUjViR1Z6SUNnd0tTNWNiaUFxSUVCd2NtOXdaWEowZVNCN2JuVnRZbVZ5ZlNCaWIyeGtJQzBnUVU1VFNTQmpiMlJsSUdadmNpQmliMnhrSUhSbGVIUWdLREVwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHR1ZFcxaVpYSjlJR1JwYlNBdElFRk9VMGtnWTI5a1pTQm1iM0lnWkdsdElIUmxlSFFnS0RJcExseHVJQ29nUUhCeWIzQmxjblI1SUh0dWRXMWlaWEo5SUdsMFlXeHBZeUF0SUVGT1Uwa2dZMjlrWlNCbWIzSWdhWFJoYkdsaklIUmxlSFFnS0RNcExseHVJQ29nUUhCeWIzQmxjblI1SUh0dWRXMWlaWEo5SUhWdVpHVnliR2x1WlNBdElFRk9VMGtnWTI5a1pTQm1iM0lnZFc1a1pYSnNhVzVsWkNCMFpYaDBJQ2cwS1M1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3Ym5WdFltVnlmU0JpYkdsdWF5QXRJRUZPVTBrZ1kyOWtaU0JtYjNJZ1lteHBibXRwYm1jZ2RHVjRkQ0FvTlNrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTI1MWJXSmxjbjBnYVc1MlpYSnpaU0F0SUVGT1Uwa2dZMjlrWlNCbWIzSWdhVzUyWlhKelpTQmpiMnh2Y25NZ0tEY3BMbHh1SUNvZ1FIQnliM0JsY25SNUlIdHVkVzFpWlhKOUlHaHBaR1JsYmlBdElFRk9VMGtnWTI5a1pTQm1iM0lnYUdsa1pHVnVJSFJsZUhRZ0tEZ3BMbHh1SUNvZ1FIQnliM0JsY25SNUlIdHVkVzFpWlhKOUlITjBjbWxyWlhSb2NtOTFaMmdnTFNCQlRsTkpJR052WkdVZ1ptOXlJSE4wY21sclpYUm9jbTkxWjJnZ2RHVjRkQ0FvT1NrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTI1MWJXSmxjbjBnWkc5MVlteGxWVzVrWlhKc2FXNWxJQzBnUVU1VFNTQmpiMlJsSUdadmNpQmtiM1ZpYkdVZ2RXNWtaWEpzYVc1bFpDQjBaWGgwSUNneU1Ta3VYRzRnS2lCQWNISnZjR1Z5ZEhrZ2UyNTFiV0psY24wZ2JtOXliV0ZzUTI5c2IzSWdMU0JCVGxOSklHTnZaR1VnZEc4Z2NtVnpaWFFnWTI5c2IzSWdkRzhnYm05eWJXRnNJQ2d5TWlrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTI1MWJXSmxjbjBnYm05SmRHRnNhV05QY2taeVlXdDBkWElnTFNCQlRsTkpJR052WkdVZ2RHOGdkSFZ5YmlCdlptWWdhWFJoYkdsaklDZ3lNeWt1WEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMjUxYldKbGNuMGdibTlWYm1SbGNteHBibVVnTFNCQlRsTkpJR052WkdVZ2RHOGdkSFZ5YmlCdlptWWdkVzVrWlhKc2FXNWxJQ2d5TkNrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTI1MWJXSmxjbjBnYm05Q2JHbHVheUF0SUVGT1Uwa2dZMjlrWlNCMGJ5QjBkWEp1SUc5bVppQmliR2x1YXlBb01qVXBMbHh1SUNvZ1FIQnliM0JsY25SNUlIdHVkVzFpWlhKOUlHNXZTVzUyWlhKelpTQXRJRUZPVTBrZ1kyOWtaU0IwYnlCMGRYSnVJRzltWmlCcGJuWmxjbk5sSUNneU55a3VYRzRnS2lCQWNISnZjR1Z5ZEhrZ2UyNTFiV0psY24wZ2JtOUlhV1JrWlc0Z0xTQkJUbE5KSUdOdlpHVWdkRzhnZEhWeWJpQnZabVlnYUdsa1pHVnVJQ2d5T0NrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTI1MWJXSmxjbjBnYm05VGRISnBhMlYwYUhKdmRXZG9JQzBnUVU1VFNTQmpiMlJsSUhSdklIUjFjbTRnYjJabUlITjBjbWxyWlhSb2NtOTFaMmdnS0RJNUtTNWNiaUFxSUVCdFpXMWlaWEpQWmlCdGIyUjFiR1U2UUZOMGVXeGxaRk4wY21sdVoxeHVJQ292WEc1bGVIQnZjblFnWTI5dWMzUWdjM1I1YkdWeklEMGdlMXh1SUNCeVpYTmxkRG9nTUN4Y2JpQWdZbTlzWkRvZ01TeGNiaUFnWkdsdE9pQXlMRnh1SUNCcGRHRnNhV002SURNc1hHNGdJSFZ1WkdWeWJHbHVaVG9nTkN4Y2JpQWdZbXhwYm1zNklEVXNYRzRnSUdsdWRtVnljMlU2SURjc1hHNGdJR2hwWkdSbGJqb2dPQ3hjYmlBZ2MzUnlhV3RsZEdoeWIzVm5hRG9nT1N4Y2JpQWdaRzkxWW14bFZXNWtaWEpzYVc1bE9pQXlNU3hjYmlBZ2JtOXliV0ZzUTI5c2IzSTZJREl5TEZ4dUlDQnViMGwwWVd4cFkwOXlSbkpoYTNSMWNqb2dNak1zWEc0Z0lHNXZWVzVrWlhKc2FXNWxPaUF5TkN4Y2JpQWdibTlDYkdsdWF6b2dNalVzWEc0Z0lHNXZTVzUyWlhKelpUb2dNamNzWEc0Z0lHNXZTR2xrWkdWdU9pQXlPQ3hjYmlBZ2JtOVRkSEpwYTJWMGFISnZkV2RvT2lBeU9TeGNibjA3WEc0aVhYMD1cbiIsImltcG9ydCB7IEFuc2lSZXNldCwgc3R5bGVzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGEgYmFzaWMgQU5TSSBjb2xvciBjb2RlIHRvIHRleHQuXG4gKiBAc3VtbWFyeSBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgc3RyaW5nLCBhbiBBTlNJIGNvbG9yIGNvZGUgbnVtYmVyLCBhbmQgYW4gb3B0aW9uYWwgYmFja2dyb3VuZCBmbGFnLlxuICogSXQgcmV0dXJucyB0aGUgdGV4dCB3cmFwcGVkIGluIHRoZSBhcHByb3ByaWF0ZSBBTlNJIGVzY2FwZSBjb2RlcyBmb3IgZWl0aGVyIGZvcmVncm91bmQgb3IgYmFja2dyb3VuZCBjb2xvcmluZy5cbiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgYmFzaWMgMTYtY29sb3IgQU5TSSBmb3JtYXR0aW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgdG8gYmUgY29sb3JlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBuIC0gVGhlIEFOU0kgY29sb3IgY29kZSBudW1iZXIuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtiZz1mYWxzZV0gLSBJZiB0cnVlLCBhcHBsaWVzIHRoZSBjb2xvciB0byB0aGUgYmFja2dyb3VuZCBpbnN0ZWFkIG9mIHRoZSBmb3JlZ3JvdW5kLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgdGV4dCB3cmFwcGVkIGluIEFOU0kgY29sb3IgY29kZXMuXG4gKlxuICogQGZ1bmN0aW9uIGNvbG9yaXplQU5TSVxuICogQG1lbWJlck9mIG1vZHVsZTpAU3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xvcml6ZUFOU0kodGV4dCwgbiwgYmcgPSBmYWxzZSkge1xuICAgIGlmIChpc05hTihuKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEludmFsaWQgY29sb3IgbnVtYmVyIG9uIHRoZSBBTlNJIHNjYWxlOiAke259LiBpZ25vcmluZy4uLmApO1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgaWYgKGJnICYmICgobiA+IDMwICYmIG4gPD0gNDApXG4gICAgICAgIHx8IChuID4gOTAgJiYgbiA8PSAxMDApKSkge1xuICAgICAgICBuID0gbiArIDEwO1xuICAgIH1cbiAgICByZXR1cm4gYFxceDFiWyR7bn1tJHt0ZXh0fSR7QW5zaVJlc2V0fWA7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGEgMjU2LWNvbG9yIEFOU0kgY29kZSB0byB0ZXh0LlxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHN0cmluZyBhbmQgYSBjb2xvciBudW1iZXIgKDAtMjU1KSBhbmQgcmV0dXJucyB0aGUgdGV4dFxuICogd3JhcHBlZCBpbiBBTlNJIGVzY2FwZSBjb2RlcyBmb3IgZWl0aGVyIGZvcmVncm91bmQgb3IgYmFja2dyb3VuZCBjb2xvcmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IHRvIGJlIGNvbG9yZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gbiAtIFRoZSBjb2xvciBudW1iZXIgKDAtMjU1KS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2JnPWZhbHNlXSAtIElmIHRydWUsIGFwcGxpZXMgdGhlIGNvbG9yIHRvIHRoZSBiYWNrZ3JvdW5kIGluc3RlYWQgb2YgdGhlIGZvcmVncm91bmQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSB0ZXh0IHdyYXBwZWQgaW4gQU5TSSBjb2xvciBjb2Rlcy5cbiAqXG4gKiBAZnVuY3Rpb24gY29sb3JpemUyNTZcbiAqIEBtZW1iZXJPZiBtb2R1bGU6QFN0eWxlZFN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29sb3JpemUyNTYodGV4dCwgbiwgYmcgPSBmYWxzZSkge1xuICAgIGlmIChpc05hTihuKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEludmFsaWQgY29sb3IgbnVtYmVyIG9uIHRoZSAyNTYgc2NhbGU6ICR7bn0uIGlnbm9yaW5nLi4uYCk7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBpZiAobiA8IDAgfHwgbiA+IDI1NSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEludmFsaWQgY29sb3IgbnVtYmVyIG9uIHRoZSAyNTYgc2NhbGU6ICR7bn0uIGlnbm9yaW5nLi4uYCk7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICByZXR1cm4gYFxceDFiWyR7YmcgPyA0OCA6IDM4fTs1OyR7bn1tJHt0ZXh0fSR7QW5zaVJlc2V0fWA7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGFuIFJHQiBjb2xvciBBTlNJIGNvZGUgdG8gdGV4dC5cbiAqIEBzdW1tYXJ5IFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBzdHJpbmcgYW5kIFJHQiBjb2xvciB2YWx1ZXMgKDAtMjU1IGZvciBlYWNoIGNvbXBvbmVudClcbiAqIGFuZCByZXR1cm5zIHRoZSB0ZXh0IHdyYXBwZWQgaW4gQU5TSSBlc2NhcGUgY29kZXMgZm9yIGVpdGhlciBmb3JlZ3JvdW5kIG9yIGJhY2tncm91bmQgY29sb3JpbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCB0byBiZSBjb2xvcmVkLlxuICogQHBhcmFtIHtudW1iZXJ9IHIgLSBUaGUgcmVkIGNvbXBvbmVudCBvZiB0aGUgY29sb3IgKDAtMjU1KS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBnIC0gVGhlIGdyZWVuIGNvbXBvbmVudCBvZiB0aGUgY29sb3IgKDAtMjU1KS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiIC0gVGhlIGJsdWUgY29tcG9uZW50IG9mIHRoZSBjb2xvciAoMC0yNTUpLlxuICogQHBhcmFtIHtib29sZWFufSBbYmc9ZmFsc2VdIC0gSWYgdHJ1ZSwgYXBwbGllcyB0aGUgY29sb3IgdG8gdGhlIGJhY2tncm91bmQgaW5zdGVhZCBvZiB0aGUgZm9yZWdyb3VuZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHRleHQgd3JhcHBlZCBpbiBBTlNJIGNvbG9yIGNvZGVzLlxuICpcbiAqIEBmdW5jdGlvbiBjb2xvcml6ZVJHQlxuICogQG1lbWJlck9mIG1vZHVsZTpTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yaXplUkdCKHRleHQsIHIsIGcsIGIsIGJnID0gZmFsc2UpIHtcbiAgICBpZiAoaXNOYU4ocikgfHwgaXNOYU4oZykgfHwgaXNOYU4oYikpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIFJHQiBjb2xvciB2YWx1ZXM6IHI9JHtyfSwgZz0ke2d9LCBiPSR7Yn0uIElnbm9yaW5nLi4uYCk7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBpZiAoW3IsIGcsIGJdLnNvbWUodiA9PiB2IDwgMCB8fCB2ID4gMjU1KSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEludmFsaWQgUkdCIGNvbG9yIHZhbHVlczogcj0ke3J9LCBnPSR7Z30sIGI9JHtifS4gSWdub3JpbmcuLi5gKTtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICAgIHJldHVybiBgXFx4MWJbJHtiZyA/IDQ4IDogMzh9OzI7JHtyfTske2d9OyR7Yn1tJHt0ZXh0fSR7QW5zaVJlc2V0fWA7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGFuIEFOU0kgc3R5bGUgY29kZSB0byB0ZXh0LlxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHN0cmluZyBhbmQgYSBzdHlsZSBjb2RlIChlaXRoZXIgYSBudW1iZXIgb3IgYSBrZXkgZnJvbSB0aGUgc3R5bGVzIG9iamVjdClcbiAqIGFuZCByZXR1cm5zIHRoZSB0ZXh0IHdyYXBwZWQgaW4gdGhlIGFwcHJvcHJpYXRlIEFOU0kgZXNjYXBlIGNvZGVzIGZvciB0aGF0IHN0eWxlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgdG8gYmUgc3R5bGVkLlxuICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IG4gLSBUaGUgc3R5bGUgY29kZSBvciBzdHlsZSBuYW1lLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgdGV4dCB3cmFwcGVkIGluIEFOU0kgc3R5bGUgY29kZXMuXG4gKlxuICogQGZ1bmN0aW9uIGFwcGx5U3R5bGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6U3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVN0eWxlKHRleHQsIG4pIHtcbiAgICBjb25zdCBzdHlsZUNvZGUgPSB0eXBlb2YgbiA9PT0gXCJudW1iZXJcIiA/IG4gOiBzdHlsZXNbbl07XG4gICAgcmV0dXJuIGBcXHgxYlske3N0eWxlQ29kZX1tJHt0ZXh0fSR7QW5zaVJlc2V0fWA7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZW1vdmVzIGFsbCBBTlNJIGZvcm1hdHRpbmcgY29kZXMgZnJvbSB0ZXh0LlxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHN0cmluZyB0aGF0IG1heSBjb250YWluIEFOU0kgZXNjYXBlIGNvZGVzIGZvciBmb3JtYXR0aW5nXG4gKiBhbmQgcmV0dXJucyBhIG5ldyBzdHJpbmcgd2l0aCBhbGwgc3VjaCBjb2RlcyByZW1vdmVkLCBsZWF2aW5nIG9ubHkgdGhlIHBsYWluIHRleHQgY29udGVudC5cbiAqIEl0IHVzZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggYW5kIHJlbW92ZSBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCBwb3RlbnRpYWxseSBjb250YWluaW5nIEFOU0kgZm9ybWF0dGluZyBjb2Rlcy5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGlucHV0IHRleHQgd2l0aCBhbGwgQU5TSSBmb3JtYXR0aW5nIGNvZGVzIHJlbW92ZWQuXG4gKlxuICogQGZ1bmN0aW9uIGNsZWFyXG4gKiBAbWVtYmVyT2YgbW9kdWxlOlN0eWxlZFN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIodGV4dCkge1xuICAgIC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBBTlNJIGVzY2FwZSBjb2Rlc1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG4gICAgY29uc3QgYW5zaVJlZ2V4ID0gL1xceDFCKD86W0AtWlxcXFwtX118XFxbWzAtP10qWyAtL10qW0Atfl0pL2c7XG4gICAgcmV0dXJuIHRleHQucmVwbGFjZShhbnNpUmVnZXgsICcnKTtcbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgcmF3IEFOU0kgZXNjYXBlIGNvZGVzIHRvIHRleHQuXG4gKiBAc3VtbWFyeSBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgc3RyaW5nIGFuZCBhIHJhdyBBTlNJIGVzY2FwZSBjb2RlLCBhbmQgcmV0dXJucyB0aGUgdGV4dFxuICogd3JhcHBlZCBpbiB0aGUgcHJvdmlkZWQgcmF3IEFOU0kgY29kZSBhbmQgdGhlIHJlc2V0IGNvZGUuIFRoaXMgYWxsb3dzIGZvciBhcHBseWluZyBjdXN0b21cbiAqIG9yIGNvbXBsZXggQU5TSSBmb3JtYXR0aW5nIHRoYXQgbWF5IG5vdCBiZSBjb3ZlcmVkIGJ5IG90aGVyIHV0aWxpdHkgZnVuY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgdG8gYmUgZm9ybWF0dGVkLlxuICogQHBhcmFtIHtzdHJpbmd9IHJhdyAtIFRoZSByYXcgQU5TSSBlc2NhcGUgY29kZSB0byBiZSBhcHBsaWVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgdGV4dCB3cmFwcGVkIGluIHRoZSByYXcgQU5TSSBjb2RlIGFuZCB0aGUgcmVzZXQgY29kZS5cbiAqXG4gKiBAZnVuY3Rpb24gcmF3XG4gKiBAbWVtYmVyT2YgbW9kdWxlOlN0eWxlZFN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmF3KHRleHQsIHJhdykge1xuICAgIHJldHVybiBgJHtyYXd9JHt0ZXh0fSR7QW5zaVJlc2V0fWA7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zjg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW5OeVl5OWpiMnh2Y25NdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJRVUVzVDBGQlR5eEZRVUZGTEZOQlFWTXNSVUZCUlN4TlFVRk5MRVZCUVVVc1RVRkJUU3hoUVVGaExFTkJRVU03UVVGSGFFUTdPenM3T3pzN096czdPenM3UjBGaFJ6dEJRVU5JTEUxQlFVMHNWVUZCVlN4WlFVRlpMRU5CUVVNc1NVRkJXU3hGUVVGRkxFTkJRVk1zUlVGQlJTeEZRVUZGTEVkQlFVY3NTMEZCU3p0SlFVVTVSQ3hKUVVGSkxFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRPMUZCUTFvc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5d3lRMEZCTWtNc1EwRkJReXhsUVVGbExFTkJRVU1zUTBGQlF6dFJRVU14UlN4UFFVRlBMRWxCUVVrc1EwRkJRenRKUVVOa0xFTkJRVU03U1VGRFJDeEpRVUZKTEVWQlFVVXNTVUZCU1N4RFFVTlNMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzU1VGQlNTeERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRPMWRCUTJoQ0xFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNTVUZCU1N4RFFVRkRMRWxCUVVrc1IwRkJSeXhEUVVGRExFTkJRVVVzUlVGQlF5eERRVUZETzFGQlF6TkNMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZCTzBsQlExb3NRMEZCUXp0SlFVTkVMRTlCUVU4c1VVRkJVU3hEUVVGRExFbEJRVWtzU1VGQlNTeEhRVUZITEZOQlFWTXNSVUZCUlN4RFFVRkRPMEZCUlhwRExFTkJRVU03UVVGSFJEczdPenM3T3pzN096czdPMGRCV1VjN1FVRkRTQ3hOUVVGTkxGVkJRVlVzVjBGQlZ5eERRVUZETEVsQlFWa3NSVUZCUlN4RFFVRlRMRVZCUVVVc1JVRkJSU3hIUVVGSExFdEJRVXM3U1VGRk4wUXNTVUZCU1N4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF6dFJRVU5hTEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc01FTkJRVEJETEVOQlFVTXNaVUZCWlN4RFFVRkRMRU5CUVVNN1VVRkRla1VzVDBGQlR5eEpRVUZKTEVOQlFVTTdTVUZEWkN4RFFVRkRPMGxCUTBRc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SFFVRkhMRVZCUVVVc1EwRkJRenRSUVVOeVFpeFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMREJEUVVFd1F5eERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRPMUZCUTNwRkxFOUJRVThzU1VGQlNTeERRVUZETzBsQlEyUXNRMEZCUXp0SlFVTkVMRTlCUVU4c1VVRkJVU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hOUVVGTkxFTkJRVU1zU1VGQlNTeEpRVUZKTEVkQlFVY3NVMEZCVXl4RlFVRkZMRU5CUVVNN1FVRkRNMFFzUTBGQlF6dEJRVVZFT3pzN096czdPenM3T3pzN096dEhRV05ITzBGQlEwZ3NUVUZCVFN4VlFVRlZMRmRCUVZjc1EwRkJReXhKUVVGWkxFVkJRVVVzUTBGQlV5eEZRVUZGTEVOQlFWTXNSVUZCUlN4RFFVRlRMRVZCUVVVc1JVRkJSU3hIUVVGSExFdEJRVXM3U1VGRGJrWXNTVUZCU1N4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETzFGQlEzQkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zSzBKQlFTdENMRU5CUVVNc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF5eGxRVUZsTEVOQlFVTXNRMEZCUXp0UlFVTTVSU3hQUVVGUExFbEJRVWtzUTBGQlF6dEpRVU5rTEVOQlFVTTdTVUZEUkN4SlFVRkpMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETzFGQlF6RkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zSzBKQlFTdENMRU5CUVVNc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF5eGxRVUZsTEVOQlFVTXNRMEZCUXp0UlFVTTVSU3hQUVVGUExFbEJRVWtzUTBGQlF6dEpRVU5rTEVOQlFVTTdTVUZEUkN4UFFVRlBMRkZCUVZFc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SlFVRkpMRWRCUVVjc1UwRkJVeXhGUVVGRkxFTkJRVU03UVVGRGNrVXNRMEZCUXp0QlFVVkVPenM3T3pzN096czdPenRIUVZkSE8wRkJRMGdzVFVGQlRTeFZRVUZWTEZWQlFWVXNRMEZCUXl4SlFVRlpMRVZCUVVVc1EwRkJLMEk3U1VGRGRFVXNUVUZCVFN4VFFVRlRMRWRCUVVjc1QwRkJUeXhEUVVGRExFdEJRVXNzVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTjRSQ3hQUVVGUExGRkJRVkVzVTBGQlV5eEpRVUZKTEVsQlFVa3NSMEZCUnl4VFFVRlRMRVZCUVVVc1EwRkJRenRCUVVOcVJDeERRVUZETzBGQlJVUTdPenM3T3pzN096czdPMGRCVjBjN1FVRkRTQ3hOUVVGTkxGVkJRVlVzUzBGQlN5eERRVUZETEVsQlFWazdTVUZEYUVNc1owUkJRV2RFTzBsQlEyaEVMRFJEUVVFMFF6dEpRVU0xUXl4TlFVRk5MRk5CUVZNc1IwRkJSeXgzUTBGQmQwTXNRMEZCUXp0SlFVTXpSQ3hQUVVGUExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNVMEZCVXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRE8wRkJRM0pETEVOQlFVTTdRVUZGUkRzN096czdPenM3T3pzN08wZEJXVWM3UVVGRFNDeE5RVUZOTEZWQlFWVXNSMEZCUnl4RFFVRkRMRWxCUVZrc1JVRkJSU3hIUVVGWE8wbEJRek5ETEU5QlFVOHNSMEZCUnl4SFFVRkhMRWRCUVVjc1NVRkJTU3hIUVVGSExGTkJRVk1zUlVGQlJTeERRVUZETzBGQlEzSkRMRU5CUVVNaUxDSm1hV3hsSWpvaVkyOXNiM0p6TG1weklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIc2dRVzV6YVZKbGMyVjBMQ0J6ZEhsc1pYTWdmU0JtY205dElGd2lMaTlqYjI1emRHRnVkSE5jSWp0Y2JseHVYRzR2S2lwY2JpQXFJRUJrWlhOamNtbHdkR2x2YmlCQmNIQnNhV1Z6SUdFZ1ltRnphV01nUVU1VFNTQmpiMnh2Y2lCamIyUmxJSFJ2SUhSbGVIUXVYRzRnS2lCQWMzVnRiV0Z5ZVNCVWFHbHpJR1oxYm1OMGFXOXVJSFJoYTJWeklHRWdjM1J5YVc1bkxDQmhiaUJCVGxOSklHTnZiRzl5SUdOdlpHVWdiblZ0WW1WeUxDQmhibVFnWVc0Z2IzQjBhVzl1WVd3Z1ltRmphMmR5YjNWdVpDQm1iR0ZuTGx4dUlDb2dTWFFnY21WMGRYSnVjeUIwYUdVZ2RHVjRkQ0IzY21Gd2NHVmtJR2x1SUhSb1pTQmhjSEJ5YjNCeWFXRjBaU0JCVGxOSklHVnpZMkZ3WlNCamIyUmxjeUJtYjNJZ1pXbDBhR1Z5SUdadmNtVm5jbTkxYm1RZ2IzSWdZbUZqYTJkeWIzVnVaQ0JqYjJ4dmNtbHVaeTVjYmlBcUlGUm9hWE1nWm5WdVkzUnBiMjRnYVhNZ2RYTmxaQ0JtYjNJZ1ltRnphV01nTVRZdFkyOXNiM0lnUVU1VFNTQm1iM0p0WVhSMGFXNW5MbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQjBaWGgwSUMwZ1ZHaGxJSFJsZUhRZ2RHOGdZbVVnWTI5c2IzSmxaQzVjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCdUlDMGdWR2hsSUVGT1Uwa2dZMjlzYjNJZ1kyOWtaU0J1ZFcxaVpYSXVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU5SUZ0aVp6MW1ZV3h6WlYwZ0xTQkpaaUIwY25WbExDQmhjSEJzYVdWeklIUm9aU0JqYjJ4dmNpQjBieUIwYUdVZ1ltRmphMmR5YjNWdVpDQnBibk4wWldGa0lHOW1JSFJvWlNCbWIzSmxaM0p2ZFc1a0xseHVJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mU0JVYUdVZ2RHVjRkQ0IzY21Gd2NHVmtJR2x1SUVGT1Uwa2dZMjlzYjNJZ1kyOWtaWE11WEc0Z0tseHVJQ29nUUdaMWJtTjBhVzl1SUdOdmJHOXlhWHBsUVU1VFNWeHVJQ29nUUcxbGJXSmxjazltSUcxdlpIVnNaVHBBVTNSNWJHVmtVM1J5YVc1blhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJqYjJ4dmNtbDZaVUZPVTBrb2RHVjRkRG9nYzNSeWFXNW5MQ0J1T2lCdWRXMWlaWElzSUdKbklEMGdabUZzYzJVcElIdGNibHh1SUNCcFppQW9hWE5PWVU0b2Jpa3BlMXh1SUNBZ0lHTnZibk52YkdVdWQyRnliaWhnU1c1MllXeHBaQ0JqYjJ4dmNpQnVkVzFpWlhJZ2IyNGdkR2hsSUVGT1Uwa2djMk5oYkdVNklDUjdibjB1SUdsbmJtOXlhVzVuTGk0dVlDazdYRzRnSUNBZ2NtVjBkWEp1SUhSbGVIUTdYRzRnSUgxY2JpQWdhV1lnS0dKbklDWW1JQ2hjYmlBZ0lDQW9iaUErSURNd0lDWW1JRzRnUEQwZ05EQXBYRzRnSUNBZ2ZId2dLRzRnUGlBNU1DQW1KaUJ1SUR3OUlERXdNQ2tnS1NsN1hHNGdJQ0FnYmlBOUlHNGdLeUF4TUZ4dUlDQjlYRzRnSUhKbGRIVnliaUJnWEZ4NE1XSmJKSHR1Zlcwa2UzUmxlSFI5Skh0QmJuTnBVbVZ6WlhSOVlEdGNibHh1ZlZ4dVhHNWNiaThxS2x4dUlDb2dRR1JsYzJOeWFYQjBhVzl1SUVGd2NHeHBaWE1nWVNBeU5UWXRZMjlzYjNJZ1FVNVRTU0JqYjJSbElIUnZJSFJsZUhRdVhHNGdLaUJBYzNWdGJXRnllU0JVYUdseklHWjFibU4wYVc5dUlIUmhhMlZ6SUdFZ2MzUnlhVzVuSUdGdVpDQmhJR052Ykc5eUlHNTFiV0psY2lBb01DMHlOVFVwSUdGdVpDQnlaWFIxY201eklIUm9aU0IwWlhoMFhHNGdLaUIzY21Gd2NHVmtJR2x1SUVGT1Uwa2daWE5qWVhCbElHTnZaR1Z6SUdadmNpQmxhWFJvWlhJZ1ptOXlaV2R5YjNWdVpDQnZjaUJpWVdOclozSnZkVzVrSUdOdmJHOXlhVzVuTGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0IwWlhoMElDMGdWR2hsSUhSbGVIUWdkRzhnWW1VZ1kyOXNiM0psWkM1Y2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQnVJQzBnVkdobElHTnZiRzl5SUc1MWJXSmxjaUFvTUMweU5UVXBMbHh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZlNCYlltYzlabUZzYzJWZElDMGdTV1lnZEhKMVpTd2dZWEJ3YkdsbGN5QjBhR1VnWTI5c2IzSWdkRzhnZEdobElHSmhZMnRuY205MWJtUWdhVzV6ZEdWaFpDQnZaaUIwYUdVZ1ptOXlaV2R5YjNWdVpDNWNiaUFxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzBnVkdobElIUmxlSFFnZDNKaGNIQmxaQ0JwYmlCQlRsTkpJR052Ykc5eUlHTnZaR1Z6TGx4dUlDcGNiaUFxSUVCbWRXNWpkR2x2YmlCamIyeHZjbWw2WlRJMU5seHVJQ29nUUcxbGJXSmxjazltSUcxdlpIVnNaVHBBVTNSNWJHVmtVM1J5YVc1blhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJqYjJ4dmNtbDZaVEkxTmloMFpYaDBPaUJ6ZEhKcGJtY3NJRzQ2SUc1MWJXSmxjaXdnWW1jZ1BTQm1ZV3h6WlNrZ2UxeHVYRzRnSUdsbUlDaHBjMDVoVGlodUtTbDdYRzRnSUNBZ1kyOXVjMjlzWlM1M1lYSnVLR0JKYm5aaGJHbGtJR052Ykc5eUlHNTFiV0psY2lCdmJpQjBhR1VnTWpVMklITmpZV3hsT2lBa2UyNTlMaUJwWjI1dmNtbHVaeTR1TG1BcE8xeHVJQ0FnSUhKbGRIVnliaUIwWlhoME8xeHVJQ0I5WEc0Z0lHbG1JQ2h1SUR3Z01DQjhmQ0J1SUQ0Z01qVTFLU0I3WEc0Z0lDQWdZMjl1YzI5c1pTNTNZWEp1S0dCSmJuWmhiR2xrSUdOdmJHOXlJRzUxYldKbGNpQnZiaUIwYUdVZ01qVTJJSE5qWVd4bE9pQWtlMjU5TGlCcFoyNXZjbWx1Wnk0dUxtQXBPMXh1SUNBZ0lISmxkSFZ5YmlCMFpYaDBPMXh1SUNCOVhHNGdJSEpsZEhWeWJpQmdYRng0TVdKYkpIdGlaeUEvSURRNElEb2dNemg5T3pVN0pIdHVmVzBrZTNSbGVIUjlKSHRCYm5OcFVtVnpaWFI5WUR0Y2JuMWNibHh1THlvcVhHNGdLaUJBWkdWelkzSnBjSFJwYjI0Z1FYQndiR2xsY3lCaGJpQlNSMElnWTI5c2IzSWdRVTVUU1NCamIyUmxJSFJ2SUhSbGVIUXVYRzRnS2lCQWMzVnRiV0Z5ZVNCVWFHbHpJR1oxYm1OMGFXOXVJSFJoYTJWeklHRWdjM1J5YVc1bklHRnVaQ0JTUjBJZ1kyOXNiM0lnZG1Gc2RXVnpJQ2d3TFRJMU5TQm1iM0lnWldGamFDQmpiMjF3YjI1bGJuUXBYRzRnS2lCaGJtUWdjbVYwZFhKdWN5QjBhR1VnZEdWNGRDQjNjbUZ3Y0dWa0lHbHVJRUZPVTBrZ1pYTmpZWEJsSUdOdlpHVnpJR1p2Y2lCbGFYUm9aWElnWm05eVpXZHliM1Z1WkNCdmNpQmlZV05yWjNKdmRXNWtJR052Ykc5eWFXNW5MbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQjBaWGgwSUMwZ1ZHaGxJSFJsZUhRZ2RHOGdZbVVnWTI5c2IzSmxaQzVjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCeUlDMGdWR2hsSUhKbFpDQmpiMjF3YjI1bGJuUWdiMllnZEdobElHTnZiRzl5SUNnd0xUSTFOU2t1WEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY24wZ1p5QXRJRlJvWlNCbmNtVmxiaUJqYjIxd2IyNWxiblFnYjJZZ2RHaGxJR052Ykc5eUlDZ3dMVEkxTlNrdVhHNGdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdZaUF0SUZSb1pTQmliSFZsSUdOdmJYQnZibVZ1ZENCdlppQjBhR1VnWTI5c2IzSWdLREF0TWpVMUtTNWNiaUFxSUVCd1lYSmhiU0I3WW05dmJHVmhibjBnVzJKblBXWmhiSE5sWFNBdElFbG1JSFJ5ZFdVc0lHRndjR3hwWlhNZ2RHaGxJR052Ykc5eUlIUnZJSFJvWlNCaVlXTnJaM0p2ZFc1a0lHbHVjM1JsWVdRZ2IyWWdkR2hsSUdadmNtVm5jbTkxYm1RdVhHNGdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlJRlJvWlNCMFpYaDBJSGR5WVhCd1pXUWdhVzRnUVU1VFNTQmpiMnh2Y2lCamIyUmxjeTVjYmlBcVhHNGdLaUJBWm5WdVkzUnBiMjRnWTI5c2IzSnBlbVZTUjBKY2JpQXFJRUJ0WlcxaVpYSlBaaUJ0YjJSMWJHVTZVM1I1YkdWa1UzUnlhVzVuWEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmpiMnh2Y21sNlpWSkhRaWgwWlhoME9pQnpkSEpwYm1jc0lISTZJRzUxYldKbGNpd2daem9nYm5WdFltVnlMQ0JpT2lCdWRXMWlaWElzSUdKbklEMGdabUZzYzJVcElIdGNiaUFnYVdZZ0tHbHpUbUZPS0hJcElIeDhJR2x6VG1GT0tHY3BJSHg4SUdselRtRk9LR0lwS1h0Y2JpQWdJQ0JqYjI1emIyeGxMbmRoY200b1lFbHVkbUZzYVdRZ1VrZENJR052Ykc5eUlIWmhiSFZsY3pvZ2NqMGtlM0o5TENCblBTUjdaMzBzSUdJOUpIdGlmUzRnU1dkdWIzSnBibWN1TGk1Z0tUdGNiaUFnSUNCeVpYUjFjbTRnZEdWNGREdGNiaUFnZlZ4dUlDQnBaaUFvVzNJc0lHY3NJR0pkTG5OdmJXVW9kaUE5UGlCMklEd2dNQ0I4ZkNCMklENGdNalUxS1NrZ2UxeHVJQ0FnSUdOdmJuTnZiR1V1ZDJGeWJpaGdTVzUyWVd4cFpDQlNSMElnWTI5c2IzSWdkbUZzZFdWek9pQnlQU1I3Y24wc0lHYzlKSHRuZlN3Z1lqMGtlMko5TGlCSloyNXZjbWx1Wnk0dUxtQXBPMXh1SUNBZ0lISmxkSFZ5YmlCMFpYaDBPMXh1SUNCOVhHNGdJSEpsZEhWeWJpQmdYRng0TVdKYkpIdGlaeUEvSURRNElEb2dNemg5T3pJN0pIdHlmVHNrZTJkOU95UjdZbjF0Skh0MFpYaDBmU1I3UVc1emFWSmxjMlYwZldBN1hHNTlYRzVjYmk4cUtseHVJQ29nUUdSbGMyTnlhWEIwYVc5dUlFRndjR3hwWlhNZ1lXNGdRVTVUU1NCemRIbHNaU0JqYjJSbElIUnZJSFJsZUhRdVhHNGdLaUJBYzNWdGJXRnllU0JVYUdseklHWjFibU4wYVc5dUlIUmhhMlZ6SUdFZ2MzUnlhVzVuSUdGdVpDQmhJSE4wZVd4bElHTnZaR1VnS0dWcGRHaGxjaUJoSUc1MWJXSmxjaUJ2Y2lCaElHdGxlU0JtY205dElIUm9aU0J6ZEhsc1pYTWdiMkpxWldOMEtWeHVJQ29nWVc1a0lISmxkSFZ5Ym5NZ2RHaGxJSFJsZUhRZ2QzSmhjSEJsWkNCcGJpQjBhR1VnWVhCd2NtOXdjbWxoZEdVZ1FVNVRTU0JsYzJOaGNHVWdZMjlrWlhNZ1ptOXlJSFJvWVhRZ2MzUjViR1V1WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFJsZUhRZ0xTQlVhR1VnZEdWNGRDQjBieUJpWlNCemRIbHNaV1F1WEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY2lCOElITjBjbWx1WjMwZ2JpQXRJRlJvWlNCemRIbHNaU0JqYjJSbElHOXlJSE4wZVd4bElHNWhiV1V1WEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOUlGUm9aU0IwWlhoMElIZHlZWEJ3WldRZ2FXNGdRVTVUU1NCemRIbHNaU0JqYjJSbGN5NWNiaUFxWEc0Z0tpQkFablZ1WTNScGIyNGdZWEJ3YkhsVGRIbHNaVnh1SUNvZ1FHMWxiV0psY2s5bUlHMXZaSFZzWlRwVGRIbHNaV1JUZEhKcGJtZGNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdGd2NHeDVVM1I1YkdVb2RHVjRkRG9nYzNSeWFXNW5MQ0J1T2lCdWRXMWlaWElnZkNCclpYbHZaaUIwZVhCbGIyWWdjM1I1YkdWektUb2djM1J5YVc1bklIdGNiaUFnWTI5dWMzUWdjM1I1YkdWRGIyUmxJRDBnZEhsd1pXOW1JRzRnUFQwOUlGd2liblZ0WW1WeVhDSWdQeUJ1SURvZ2MzUjViR1Z6VzI1ZE8xeHVJQ0J5WlhSMWNtNGdZRnhjZURGaVd5UjdjM1I1YkdWRGIyUmxmVzBrZTNSbGVIUjlKSHRCYm5OcFVtVnpaWFI5WUR0Y2JuMWNibHh1THlvcVhHNGdLaUJBWkdWelkzSnBjSFJwYjI0Z1VtVnRiM1psY3lCaGJHd2dRVTVUU1NCbWIzSnRZWFIwYVc1bklHTnZaR1Z6SUdaeWIyMGdkR1Y0ZEM1Y2JpQXFJRUJ6ZFcxdFlYSjVJRlJvYVhNZ1puVnVZM1JwYjI0Z2RHRnJaWE1nWVNCemRISnBibWNnZEdoaGRDQnRZWGtnWTI5dWRHRnBiaUJCVGxOSklHVnpZMkZ3WlNCamIyUmxjeUJtYjNJZ1ptOXliV0YwZEdsdVoxeHVJQ29nWVc1a0lISmxkSFZ5Ym5NZ1lTQnVaWGNnYzNSeWFXNW5JSGRwZEdnZ1lXeHNJSE4xWTJnZ1kyOWtaWE1nY21WdGIzWmxaQ3dnYkdWaGRtbHVaeUJ2Ym14NUlIUm9aU0J3YkdGcGJpQjBaWGgwSUdOdmJuUmxiblF1WEc0Z0tpQkpkQ0IxYzJWeklHRWdjbVZuZFd4aGNpQmxlSEJ5WlhOemFXOXVJSFJ2SUcxaGRHTm9JR0Z1WkNCeVpXMXZkbVVnUVU1VFNTQmxjMk5oY0dVZ2MyVnhkV1Z1WTJWekxseHVJQ3BjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCMFpYaDBJQzBnVkdobElIUmxlSFFnY0c5MFpXNTBhV0ZzYkhrZ1kyOXVkR0ZwYm1sdVp5QkJUbE5KSUdadmNtMWhkSFJwYm1jZ1kyOWtaWE11WEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOUlGUm9aU0JwYm5CMWRDQjBaWGgwSUhkcGRHZ2dZV3hzSUVGT1Uwa2dabTl5YldGMGRHbHVaeUJqYjJSbGN5QnlaVzF2ZG1Wa0xseHVJQ3BjYmlBcUlFQm1kVzVqZEdsdmJpQmpiR1ZoY2x4dUlDb2dRRzFsYldKbGNrOW1JRzF2WkhWc1pUcFRkSGxzWldSVGRISnBibWRjYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHTnNaV0Z5S0hSbGVIUTZJSE4wY21sdVp5azZJSE4wY21sdVp5QjdYRzRnSUM4dklGSmxaM1ZzWVhJZ1pYaHdjbVZ6YzJsdmJpQjBieUJ0WVhSamFDQkJUbE5KSUdWelkyRndaU0JqYjJSbGMxeHVJQ0F2THlCbGMyeHBiblF0WkdsellXSnNaUzF1WlhoMExXeHBibVVnYm04dFkyOXVkSEp2YkMxeVpXZGxlRnh1SUNCamIyNXpkQ0JoYm5OcFVtVm5aWGdnUFNBdlhGeDRNVUlvUHpwYlFDMWFYRnhjWEMxZlhYeGNYRnRiTUMwL1hTcGJJQzB2WFNwYlFDMStYU2t2Wnp0Y2JpQWdjbVYwZFhKdUlIUmxlSFF1Y21Wd2JHRmpaU2hoYm5OcFVtVm5aWGdzSUNjbktUdGNibjFjYmx4dUx5b3FYRzRnS2lCQVpHVnpZM0pwY0hScGIyNGdRWEJ3YkdsbGN5QnlZWGNnUVU1VFNTQmxjMk5oY0dVZ1kyOWtaWE1nZEc4Z2RHVjRkQzVjYmlBcUlFQnpkVzF0WVhKNUlGUm9hWE1nWm5WdVkzUnBiMjRnZEdGclpYTWdZU0J6ZEhKcGJtY2dZVzVrSUdFZ2NtRjNJRUZPVTBrZ1pYTmpZWEJsSUdOdlpHVXNJR0Z1WkNCeVpYUjFjbTV6SUhSb1pTQjBaWGgwWEc0Z0tpQjNjbUZ3Y0dWa0lHbHVJSFJvWlNCd2NtOTJhV1JsWkNCeVlYY2dRVTVUU1NCamIyUmxJR0Z1WkNCMGFHVWdjbVZ6WlhRZ1kyOWtaUzRnVkdocGN5QmhiR3h2ZDNNZ1ptOXlJR0Z3Y0d4NWFXNW5JR04xYzNSdmJWeHVJQ29nYjNJZ1kyOXRjR3hsZUNCQlRsTkpJR1p2Y20xaGRIUnBibWNnZEdoaGRDQnRZWGtnYm05MElHSmxJR052ZG1WeVpXUWdZbmtnYjNSb1pYSWdkWFJwYkdsMGVTQm1kVzVqZEdsdmJuTXVYRzRnS2x4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIUmxlSFFnTFNCVWFHVWdkR1Y0ZENCMGJ5QmlaU0JtYjNKdFlYUjBaV1F1WEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2NtRjNJQzBnVkdobElISmhkeUJCVGxOSklHVnpZMkZ3WlNCamIyUmxJSFJ2SUdKbElHRndjR3hwWldRdVhHNGdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlJRlJvWlNCMFpYaDBJSGR5WVhCd1pXUWdhVzRnZEdobElISmhkeUJCVGxOSklHTnZaR1VnWVc1a0lIUm9aU0J5WlhObGRDQmpiMlJsTGx4dUlDcGNiaUFxSUVCbWRXNWpkR2x2YmlCeVlYZGNiaUFxSUVCdFpXMWlaWEpQWmlCdGIyUjFiR1U2VTNSNWJHVmtVM1J5YVc1blhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ5WVhjb2RHVjRkRG9nYzNSeWFXNW5MQ0J5WVhjNklITjBjbWx1WnlrNklITjBjbWx1WnlCN1hHNGdJSEpsZEhWeWJpQmdKSHR5WVhkOUpIdDBaWGgwZlNSN1FXNXphVkpsYzJWMGZXQTdYRzU5SWwxOVxuIiwiaW1wb3J0IHsgQnJpZ2h0QmFja2dyb3VuZENvbG9ycywgQnJpZ2h0Rm9yZWdyb3VuZENvbG9ycywgU3RhbmRhcmRCYWNrZ3JvdW5kQ29sb3JzLCBTdGFuZGFyZEZvcmVncm91bmRDb2xvcnMsIHN0eWxlcywgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNsZWFyLCBjb2xvcml6ZTI1NiwgY29sb3JpemVBTlNJLCBjb2xvcml6ZVJHQiwgcmF3LCBhcHBseVN0eWxlLCB9IGZyb20gXCIuL2NvbG9yc1wiO1xuLyoqXG4gKiBAY2xhc3MgU3R5bGVkU3RyaW5nXG4gKiBAZGVzY3JpcHRpb24gQSBjbGFzcyB0aGF0IGV4dGVuZHMgc3RyaW5nIGZ1bmN0aW9uYWxpdHkgd2l0aCBBTlNJIGNvbG9yIGFuZCBzdHlsZSBvcHRpb25zLlxuICogQHN1bW1hcnkgU3R5bGVkU3RyaW5nIHByb3ZpZGVzIG1ldGhvZHMgdG8gYXBwbHkgdmFyaW91cyBBTlNJIGNvbG9yIGFuZCBzdHlsZSBvcHRpb25zIHRvIHRleHQgc3RyaW5ncy5cbiAqIEl0IGltcGxlbWVudHMgdGhlIENvbG9yaXplT3B0aW9ucyBpbnRlcmZhY2UgYW5kIHByb3hpZXMgbmF0aXZlIHN0cmluZyBtZXRob2RzIHRvIHRoZSB1bmRlcmx5aW5nIHRleHQuXG4gKiBUaGlzIGNsYXNzIGFsbG93cyBmb3IgY2hhaW5pbmcgb2Ygc3R5bGluZyBtZXRob2RzIGFuZCBlYXN5IGFwcGxpY2F0aW9uIG9mIGNvbG9ycyBhbmQgc3R5bGVzIHRvIHRleHQuXG4gKlxuICogQGltcGxlbWVudHMge0NvbG9yaXplT3B0aW9uc31cbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIGluaXRpYWwgdGV4dCBzdHJpbmcgdG8gYmUgc3R5bGVkLlxuICovXG5leHBvcnQgY2xhc3MgU3R5bGVkU3RyaW5nIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZXh0KSB7XG4gICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgICAgIC8vIEJhc2ljIGNvbG9yc1xuICAgICAgICBPYmplY3QuZW50cmllcyhTdGFuZGFyZEZvcmVncm91bmRDb2xvcnMpLmZvckVhY2goKFtuYW1lLCBjb2RlXSkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIG5hbWUsIHtcbiAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHRoaXMuZm9yZWdyb3VuZChjb2RlKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoQnJpZ2h0Rm9yZWdyb3VuZENvbG9ycykuZm9yRWFjaCgoW25hbWUsIGNvZGVdKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgbmFtZSwge1xuICAgICAgICAgICAgICAgIGdldDogKCkgPT4gdGhpcy5mb3JlZ3JvdW5kKGNvZGUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBCYWNrZ3JvdW5kIGNvbG9yc1xuICAgICAgICBPYmplY3QuZW50cmllcyhTdGFuZGFyZEJhY2tncm91bmRDb2xvcnMpLmZvckVhY2goKFtuYW1lLCBjb2RlXSkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIG5hbWUsIHtcbiAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHRoaXMuYmFja2dyb3VuZChjb2RlKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoQnJpZ2h0QmFja2dyb3VuZENvbG9ycykuZm9yRWFjaCgoW25hbWUsIGNvZGVdKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgbmFtZSwge1xuICAgICAgICAgICAgICAgIGdldDogKCkgPT4gdGhpcy5iYWNrZ3JvdW5kKGNvZGUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBTdHlsZXNcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoc3R5bGVzKS5mb3JFYWNoKChbbmFtZSwgY29kZV0pID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBuYW1lLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLnN0eWxlKGNvZGUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2xlYXJzIGFsbCBzdHlsaW5nIGZyb20gdGhlIHRleHQuXG4gICAgICogQHN1bW1hcnkgUmVtb3ZlcyBhbGwgQU5TSSBjb2xvciBhbmQgc3R5bGUgY29kZXMgZnJvbSB0aGUgdGV4dC5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCBjbGVhcmVkIHN0eWxpbmcuXG4gICAgICovXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IGNsZWFyKHRoaXMudGV4dCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQXBwbGllcyByYXcgQU5TSSBjb2RlcyB0byB0aGUgdGV4dC5cbiAgICAgKiBAc3VtbWFyeSBBbGxvd3MgZGlyZWN0IGFwcGxpY2F0aW9uIG9mIEFOU0kgZXNjYXBlIHNlcXVlbmNlcyB0byB0aGUgdGV4dC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmF3QW5zaSAtIFRoZSByYXcgQU5TSSBlc2NhcGUgc2VxdWVuY2UgdG8gYXBwbHkuXG4gICAgICogQHJldHVybiB7U3R5bGVkU3RyaW5nfSBUaGUgU3R5bGVkU3RyaW5nIGluc3RhbmNlIHdpdGggdGhlIHJhdyBBTlNJIGNvZGUgYXBwbGllZC5cbiAgICAgKi9cbiAgICByYXcocmF3QW5zaSkge1xuICAgICAgICB0aGlzLnRleHQgPSByYXcodGhpcy50ZXh0LCByYXdBbnNpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGEgZm9yZWdyb3VuZCBjb2xvciB0byB0aGUgdGV4dC5cbiAgICAgKiBAc3VtbWFyeSBTZXRzIHRoZSB0ZXh0IGNvbG9yIHVzaW5nIEFOU0kgY29sb3IgY29kZXMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gLSBUaGUgQU5TSSBjb2xvciBjb2RlIGZvciB0aGUgZm9yZWdyb3VuZCBjb2xvci5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCB0aGUgZm9yZWdyb3VuZCBjb2xvciBhcHBsaWVkLlxuICAgICAqL1xuICAgIGZvcmVncm91bmQobikge1xuICAgICAgICB0aGlzLnRleHQgPSBjb2xvcml6ZUFOU0kodGhpcy50ZXh0LCBuKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGEgYmFja2dyb3VuZCBjb2xvciB0byB0aGUgdGV4dC5cbiAgICAgKiBAc3VtbWFyeSBTZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSB0ZXh0IHVzaW5nIEFOU0kgY29sb3IgY29kZXMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gLSBUaGUgQU5TSSBjb2xvciBjb2RlIGZvciB0aGUgYmFja2dyb3VuZCBjb2xvci5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCB0aGUgYmFja2dyb3VuZCBjb2xvciBhcHBsaWVkLlxuICAgICAqL1xuICAgIGJhY2tncm91bmQobikge1xuICAgICAgICB0aGlzLnRleHQgPSBjb2xvcml6ZUFOU0kodGhpcy50ZXh0LCBuLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGEgdGV4dCBzdHlsZSB0byB0aGUgc3RyaW5nLlxuICAgICAqIEBzdW1tYXJ5IFNldHMgdGV4dCBzdHlsZXMgc3VjaCBhcyBib2xkLCBpdGFsaWMsIG9yIHVuZGVybGluZSB1c2luZyBBTlNJIHN0eWxlIGNvZGVzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nfSBuIC0gVGhlIHN0eWxlIGNvZGUgb3Iga2V5IGZyb20gdGhlIHN0eWxlcyBvYmplY3QuXG4gICAgICogQHJldHVybiB7U3R5bGVkU3RyaW5nfSBUaGUgU3R5bGVkU3RyaW5nIGluc3RhbmNlIHdpdGggdGhlIHN0eWxlIGFwcGxpZWQuXG4gICAgICovXG4gICAgc3R5bGUobikge1xuICAgICAgICBpZiAodHlwZW9mIG4gPT09IFwic3RyaW5nXCIgJiYgIShuIGluIHN0eWxlcykpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgSW52YWxpZCBzdHlsZTogJHtufWApO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50ZXh0ID0gYXBwbHlTdHlsZSh0aGlzLnRleHQsIG4pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgYSAyNTYtY29sb3IgZm9yZWdyb3VuZCBjb2xvciB0byB0aGUgdGV4dC5cbiAgICAgKiBAc3VtbWFyeSBTZXRzIHRoZSB0ZXh0IGNvbG9yIHVzaW5nIHRoZSBleHRlbmRlZCAyNTYtY29sb3IgcGFsZXR0ZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiAtIFRoZSBjb2xvciBudW1iZXIgZnJvbSB0aGUgMjU2LWNvbG9yIHBhbGV0dGUuXG4gICAgICogQHJldHVybiB7U3R5bGVkU3RyaW5nfSBUaGUgU3R5bGVkU3RyaW5nIGluc3RhbmNlIHdpdGggdGhlIDI1Ni1jb2xvciBmb3JlZ3JvdW5kIGFwcGxpZWQuXG4gICAgICovXG4gICAgY29sb3IyNTYobikge1xuICAgICAgICB0aGlzLnRleHQgPSBjb2xvcml6ZTI1Nih0aGlzLnRleHQsIG4pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgYSAyNTYtY29sb3IgYmFja2dyb3VuZCBjb2xvciB0byB0aGUgdGV4dC5cbiAgICAgKiBAc3VtbWFyeSBTZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIHVzaW5nIHRoZSBleHRlbmRlZCAyNTYtY29sb3IgcGFsZXR0ZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiAtIFRoZSBjb2xvciBudW1iZXIgZnJvbSB0aGUgMjU2LWNvbG9yIHBhbGV0dGUuXG4gICAgICogQHJldHVybiB7U3R5bGVkU3RyaW5nfSBUaGUgU3R5bGVkU3RyaW5nIGluc3RhbmNlIHdpdGggdGhlIDI1Ni1jb2xvciBiYWNrZ3JvdW5kIGFwcGxpZWQuXG4gICAgICovXG4gICAgYmdDb2xvcjI1NihuKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IGNvbG9yaXplMjU2KHRoaXMudGV4dCwgbiwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQXBwbGllcyBhbiBSR0IgZm9yZWdyb3VuZCBjb2xvciB0byB0aGUgdGV4dC5cbiAgICAgKiBAc3VtbWFyeSBTZXRzIHRoZSB0ZXh0IGNvbG9yIHVzaW5nIFJHQiB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHIgLSBUaGUgcmVkIGNvbXBvbmVudCAoMC0yNTUpLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBnIC0gVGhlIGdyZWVuIGNvbXBvbmVudCAoMC0yNTUpLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiIC0gVGhlIGJsdWUgY29tcG9uZW50ICgwLTI1NSkuXG4gICAgICogQHJldHVybiB7U3R5bGVkU3RyaW5nfSBUaGUgU3R5bGVkU3RyaW5nIGluc3RhbmNlIHdpdGggdGhlIFJHQiBmb3JlZ3JvdW5kIGNvbG9yIGFwcGxpZWQuXG4gICAgICovXG4gICAgcmdiKHIsIGcsIGIpIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gY29sb3JpemVSR0IodGhpcy50ZXh0LCByLCBnLCBiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGFuIFJHQiBiYWNrZ3JvdW5kIGNvbG9yIHRvIHRoZSB0ZXh0LlxuICAgICAqIEBzdW1tYXJ5IFNldHMgdGhlIGJhY2tncm91bmQgY29sb3IgdXNpbmcgUkdCIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gciAtIFRoZSByZWQgY29tcG9uZW50ICgwLTI1NSkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGcgLSBUaGUgZ3JlZW4gY29tcG9uZW50ICgwLTI1NSkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGIgLSBUaGUgYmx1ZSBjb21wb25lbnQgKDAtMjU1KS5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCB0aGUgUkdCIGJhY2tncm91bmQgY29sb3IgYXBwbGllZC5cbiAgICAgKi9cbiAgICBiZ1JnYihyLCBnLCBiKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IGNvbG9yaXplUkdCKHRoaXMudGV4dCwgciwgZywgYiwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIFN0eWxlZFN0cmluZyB0byBhIHJlZ3VsYXIgc3RyaW5nLlxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIHVuZGVybHlpbmcgdGV4dCB3aXRoIGFsbCBhcHBsaWVkIHN0eWxpbmcuXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3R5bGVkIHRleHQgYXMgYSByZWd1bGFyIHN0cmluZy5cbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dDtcbiAgICB9XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIHN0eWxpbmcgdG8gYSBnaXZlbiB0ZXh0IHN0cmluZy5cbiAqIEBzdW1tYXJ5IFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBzdHJpbmcgYW5kIHJldHVybnMgYSBTdHlsZWRTdHJpbmcgb2JqZWN0LCB3aGljaCBpcyBhbiBlbmhhbmNlZFxuICogdmVyc2lvbiBvZiB0aGUgb3JpZ2luYWwgc3RyaW5nIHdpdGggYWRkaXRpb25hbCBtZXRob2RzIGZvciBhcHBseWluZyB2YXJpb3VzIEFOU0kgY29sb3IgYW5kIHN0eWxlXG4gKiBvcHRpb25zLiBJdCBzZXRzIHVwIGEgbWFwcGVyIG9iamVjdCB3aXRoIG1ldGhvZHMgZm9yIGRpZmZlcmVudCBzdHlsaW5nIG9wZXJhdGlvbnMgYW5kIHRoZW5cbiAqIGRlZmluZXMgcHJvcGVydGllcyBvbiB0aGUgdGV4dCBzdHJpbmcgdG8gbWFrZSB0aGVzZSBtZXRob2RzIGFjY2Vzc2libGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gdCAgVGhlIGlucHV0IHRleHQgdG8gYmUgc3R5bGVkLlxuICogQHJldHVybiB7U3R5bGVkU3RyaW5nfSBBIFN0eWxlZFN0cmluZyBvYmplY3Qgd2l0aCBhZGRpdGlvbmFsIHN0eWxpbmcgbWV0aG9kcy5cbiAqXG4gKiBAZnVuY3Rpb24gc3R5bGVcbiAqXG4gKiBAbWVtYmVyT2YgU3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHlsZSguLi50KSB7XG4gICAgcmV0dXJuIG5ldyBTdHlsZWRTdHJpbmcodC5qb2luKFwiIFwiKSk7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zjg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW5OeVl5OXpkSEpwYm1kekxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRVUZCTEU5QlFVOHNSVUZEVEN4elFrRkJjMElzUlVGRGRFSXNjMEpCUVhOQ0xFVkJRM1JDTEhkQ1FVRjNRaXhGUVVONFFpeDNRa0ZCZDBJc1JVRkRlRUlzVFVGQlRTeEhRVU5RTEUxQlFVMHNZVUZCWVN4RFFVRkRPMEZCUTNKQ0xFOUJRVThzUlVGRFRDeExRVUZMTEVWQlEwd3NWMEZCVnl4RlFVTllMRmxCUVZrc1JVRkRXaXhYUVVGWExFVkJRMWdzUjBGQlJ5eEZRVU5JTEZWQlFWVXNSMEZEV0N4TlFVRk5MRlZCUVZVc1EwRkJRenRCUVRaRGJFSTdPenM3T3pzN096dEhRVk5ITzBGQlEwZ3NUVUZCVFN4UFFVRlBMRmxCUVZrN1NVRTJVM1pDTEZsQlFWa3NTVUZCV1R0UlFVTjBRaXhKUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTnFRaXhsUVVGbE8xRkJRMllzVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4M1FrRkJkMElzUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZEYUVVc1RVRkJUU3hEUVVGRExHTkJRV01zUTBGQlF5eEpRVUZKTEVWQlFVVXNTVUZCU1N4RlFVRkZPMmRDUVVOb1F5eEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eEpRVUZKTEVOQlFVTTdZVUZEYWtNc1EwRkJReXhEUVVGRE8xRkJRMHdzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZGU0N4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExITkNRVUZ6UWl4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVWQlFVVXNTVUZCU1N4RFFVRkRMRVZCUVVVc1JVRkJSVHRaUVVNNVJDeE5RVUZOTEVOQlFVTXNZMEZCWXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hKUVVGSkxFVkJRVVU3WjBKQlEyaERMRWRCUVVjc1JVRkJSU3hIUVVGSExFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRWxCUVVrc1EwRkJRenRoUVVOcVF5eERRVUZETEVOQlFVTTdVVUZEVEN4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVWSUxHOUNRVUZ2UWp0UlFVTndRaXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEhkQ1FVRjNRaXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1NVRkJTU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU5vUlN4TlFVRk5MRU5CUVVNc1kwRkJZeXhEUVVGRExFbEJRVWtzUlVGQlJTeEpRVUZKTEVWQlFVVTdaMEpCUTJoRExFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRExFbEJRVWtzUTBGQlF6dGhRVU5xUXl4RFFVRkRMRU5CUVVNN1VVRkRUQ3hEUVVGRExFTkJRVU1zUTBGQlF6dFJRVVZJTEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc2MwSkJRWE5DTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUlVGQlJTeEpRVUZKTEVOQlFVTXNSVUZCUlN4RlFVRkZPMWxCUXpsRUxFMUJRVTBzUTBGQlF5eGpRVUZqTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWxCUVVrc1JVRkJSVHRuUWtGRGFFTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNTVUZCU1N4RFFVRkRPMkZCUTJwRExFTkJRVU1zUTBGQlF6dFJRVU5NTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUlVnc1UwRkJVenRSUVVOVUxFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVWQlFVVXNTVUZCU1N4RFFVRkRMRVZCUVVVc1JVRkJSVHRaUVVNNVF5eE5RVUZOTEVOQlFVTXNZMEZCWXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hKUVVGSkxFVkJRVVU3WjBKQlEyaERMRWRCUVVjc1JVRkJSU3hIUVVGSExFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJRenRoUVVNMVFpeERRVUZETEVOQlFVTTdVVUZEVEN4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOTUxFTkJRVU03U1VGRlJEczdPenRQUVVsSE8wbEJRMGdzUzBGQlN6dFJRVU5JTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTTNRaXhQUVVGUExFbEJRVWtzUTBGQlF6dEpRVU5rTEVOQlFVTTdTVUZGUkRzN096czdUMEZMUnp0SlFVTklMRWRCUVVjc1EwRkJReXhQUVVGbE8xRkJRMnBDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVWQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNN1VVRkRjRU1zVDBGQlR5eEpRVUZKTEVOQlFVTTdTVUZEWkN4RFFVRkRPMGxCUlVRN096czdPMDlCUzBjN1NVRkRTQ3hWUVVGVkxFTkJRVU1zUTBGQlV6dFJRVU5zUWl4SlFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExGbEJRVmtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM1pETEU5QlFVOHNTVUZCU1N4RFFVRkRPMGxCUTJRc1EwRkJRenRKUVVWRU96czdPenRQUVV0SE8wbEJRMGdzVlVGQlZTeERRVUZETEVOQlFWTTdVVUZEYkVJc1NVRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdVVUZETjBNc1QwRkJUeXhKUVVGSkxFTkJRVU03U1VGRFpDeERRVUZETzBsQlJVUTdPenM3TzA5QlMwYzdTVUZEU0N4TFFVRkxMRU5CUVVNc1EwRkJLMEk3VVVGRGJrTXNTVUZCU1N4UFFVRlBMRU5CUVVNc1MwRkJTeXhSUVVGUkxFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1JVRkJSU3hEUVVGRE8xbEJRelZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1dVRkRjRU1zVDBGQlR5eEpRVUZKTEVOQlFVTTdVVUZEWkN4RFFVRkRPMUZCUTBRc1NVRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eFZRVUZWTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU55UXl4UFFVRlBMRWxCUVVrc1EwRkJRenRKUVVOa0xFTkJRVU03U1VGRlJEczdPenM3VDBGTFJ6dEpRVU5JTEZGQlFWRXNRMEZCUXl4RFFVRlRPMUZCUTJoQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEZEVNc1QwRkJUeXhKUVVGSkxFTkJRVU03U1VGRFpDeERRVUZETzBsQlJVUTdPenM3TzA5QlMwYzdTVUZEU0N4VlFVRlZMRU5CUVVNc1EwRkJVenRSUVVOc1FpeEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVNMVF5eFBRVUZQTEVsQlFVa3NRMEZCUXp0SlFVTmtMRU5CUVVNN1NVRkZSRHM3T3pzN096dFBRVTlITzBsQlEwZ3NSMEZCUnl4RFFVRkRMRU5CUVZNc1JVRkJSU3hEUVVGVExFVkJRVVVzUTBGQlV6dFJRVU5xUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZETlVNc1QwRkJUeXhKUVVGSkxFTkJRVU03U1VGRFpDeERRVUZETzBsQlJVUTdPenM3T3pzN1QwRlBSenRKUVVOSUxFdEJRVXNzUTBGQlF5eERRVUZUTEVWQlFVVXNRMEZCVXl4RlFVRkZMRU5CUVZNN1VVRkRia01zU1VGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU5zUkN4UFFVRlBMRWxCUVVrc1EwRkJRenRKUVVOa0xFTkJRVU03U1VGRlJEczdPenRQUVVsSE8wbEJRMGdzVVVGQlVUdFJRVU5PTEU5QlFVOHNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJRenRKUVVOdVFpeERRVUZETzBOQlEwWTdRVUZGUkRzN096czdPenM3T3pzN096dEhRV0ZITzBGQlEwZ3NUVUZCVFN4VlFVRlZMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVmM3U1VGRGJFTXNUMEZCVHl4SlFVRkpMRmxCUVZrc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRka01zUTBGQlF5SXNJbVpwYkdVaU9pSnpkSEpwYm1kekxtcHpJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSHRjYmlBZ1FuSnBaMmgwUW1GamEyZHliM1Z1WkVOdmJHOXljeXhjYmlBZ1FuSnBaMmgwUm05eVpXZHliM1Z1WkVOdmJHOXljeXhjYmlBZ1UzUmhibVJoY21SQ1lXTnJaM0p2ZFc1a1EyOXNiM0p6TEZ4dUlDQlRkR0Z1WkdGeVpFWnZjbVZuY205MWJtUkRiMnh2Y25Nc1hHNGdJSE4wZVd4bGN5eGNibjBnWm5KdmJTQmNJaTR2WTI5dWMzUmhiblJ6WENJN1hHNXBiWEJ2Y25RZ2UxeHVJQ0JqYkdWaGNpeGNiaUFnWTI5c2IzSnBlbVV5TlRZc1hHNGdJR052Ykc5eWFYcGxRVTVUU1N4Y2JpQWdZMjlzYjNKcGVtVlNSMElzWEc0Z0lISmhkeXhjYmlBZ1lYQndiSGxUZEhsc1pTeGNibjBnWm5KdmJTQmNJaTR2WTI5c2IzSnpYQ0k3WEc1Y2JpOHFLbHh1SUNvZ1FIUjVjR1ZrWldZZ1EyOXNiM0pwZW1WUGNIUnBiMjV6WEc0Z0tpQkFaR1Z6WTNKcGNIUnBiMjRnVDNCMGFXOXVjeUJtYjNJZ2RHVjRkQ0JqYjJ4dmNtbDZZWFJwYjI0Z2RYTnBibWNnUVU1VFNTQmpiMlJsY3k1Y2JpQXFJRUJ6ZFcxdFlYSjVJRlJvYVhNZ2RIbHdaU0JrWldacGJtVnpJSFJvWlNCemRISjFZM1IxY21VZ2IyWWdkR2hsSUc5aWFtVmpkQ0J5WlhSMWNtNWxaQ0JpZVNCMGFHVWdZMjlzYjNKcGVtVWdablZ1WTNScGIyNHVYRzRnS2lCSmRDQnBibU5zZFdSbGN5QnRaWFJvYjJSeklHWnZjaUJoY0hCc2VXbHVaeUIyWVhKcGIzVnpJR052Ykc5eUlHRnVaQ0J6ZEhsc1pTQnZjSFJwYjI1eklIUnZJSFJsZUhRZ2RYTnBibWNnUVU1VFNTQmxjMk5oY0dVZ1kyOWtaWE11WEc0Z0tseHVJQ29nUUhCeWIzQmxjblI1SUh0VGRIbHNaV1JUZEhKcGJtZDlJRk4wWVc1a1lYSmtSbTl5WldkeWIzVnVaRU52Ykc5eWN5QkhaWFIwWlhJZ1ptOXlJR1ZoWTJnZ2MzUmhibVJoY21RZ1ptOXlaV2R5YjNWdVpDQmpiMnh2Y2k1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3VTNSNWJHVmtVM1J5YVc1bmZTQkNjbWxuYUhSR2IzSmxaM0p2ZFc1a1EyOXNiM0p6SUVkbGRIUmxjaUJtYjNJZ1pXRmphQ0JpY21sbmFIUWdabTl5WldkeWIzVnVaQ0JqYjJ4dmNpNWNiaUFxSUVCd2NtOXdaWEowZVNCN1UzUjViR1ZrVTNSeWFXNW5mU0JUZEdGdVpHRnlaRUpoWTJ0bmNtOTFibVJEYjJ4dmNuTWdSMlYwZEdWeUlHWnZjaUJsWVdOb0lITjBZVzVrWVhKa0lHSmhZMnRuY205MWJtUWdZMjlzYjNJdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTFOMGVXeGxaRk4wY21sdVozMGdRbkpwWjJoMFFtRmphMmR5YjNWdVpFTnZiRzl5Y3lCSFpYUjBaWElnWm05eUlHVmhZMmdnWW5KcFoyaDBJR0poWTJ0bmNtOTFibVFnWTI5c2IzSXVYRzRnS2lCQWNISnZjR1Z5ZEhrZ2UxTjBlV3hsWkZOMGNtbHVaMzBnYzNSNWJHVnpJRWRsZEhSbGNpQm1iM0lnWldGamFDQjBaWGgwSUhOMGVXeGxMbHh1SUNvZ1FIQnliM0JsY25SNUlIdG1kVzVqZEdsdmJpZ3BPaUJUZEhsc1pXUlRkSEpwYm1kOUlHTnNaV0Z5SUZKbGJXOTJaWE1nWVd4c0lITjBlV3hwYm1jZ1puSnZiU0IwYUdVZ2RHVjRkQzVjYmlBcUlFQndjbTl3WlhKMGVTQjdablZ1WTNScGIyNG9jM1J5YVc1bktUb2dVM1I1YkdWa1UzUnlhVzVuZlNCeVlYY2dRWEJ3YkdsbGN5QnlZWGNnUVU1VFNTQmpiMlJsY3lCMGJ5QjBhR1VnZEdWNGRDNWNiaUFxSUVCd2NtOXdaWEowZVNCN1puVnVZM1JwYjI0b2JuVnRZbVZ5S1RvZ1UzUjViR1ZrVTNSeWFXNW5mU0JtYjNKbFozSnZkVzVrSUVGd2NHeHBaWE1nWVNCbWIzSmxaM0p2ZFc1a0lHTnZiRzl5SUhWemFXNW5JRUZPVTBrZ1kyOWtaWE11WEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMloxYm1OMGFXOXVLRzUxYldKbGNpazZJRk4wZVd4bFpGTjBjbWx1WjMwZ1ltRmphMmR5YjNWdVpDQkJjSEJzYVdWeklHRWdZbUZqYTJkeWIzVnVaQ0JqYjJ4dmNpQjFjMmx1WnlCQlRsTkpJR052WkdWekxseHVJQ29nUUhCeWIzQmxjblI1SUh0bWRXNWpkR2x2YmloemRISnBibWNwT2lCVGRIbHNaV1JUZEhKcGJtZDlJSE4wZVd4bElFRndjR3hwWlhNZ1lTQjBaWGgwSUhOMGVXeGxJSFZ6YVc1bklFRk9VMGtnWTI5a1pYTXVYRzRnS2lCQWNISnZjR1Z5ZEhrZ2UyWjFibU4wYVc5dUtHNTFiV0psY2lrNklGTjBlV3hsWkZOMGNtbHVaMzBnWTI5c2IzSXlOVFlnUVhCd2JHbGxjeUJoSURJMU5pMWpiMnh2Y2lCbWIzSmxaM0p2ZFc1a0lHTnZiRzl5TGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHRtZFc1amRHbHZiaWh1ZFcxaVpYSXBPaUJUZEhsc1pXUlRkSEpwYm1kOUlHSm5RMjlzYjNJeU5UWWdRWEJ3YkdsbGN5QmhJREkxTmkxamIyeHZjaUJpWVdOclozSnZkVzVrSUdOdmJHOXlMbHh1SUNvZ1FIQnliM0JsY25SNUlIdG1kVzVqZEdsdmJpaHVkVzFpWlhJc0lHNTFiV0psY2l3Z2JuVnRZbVZ5S1RvZ1UzUjViR1ZrVTNSeWFXNW5mU0J5WjJJZ1FYQndiR2xsY3lCaGJpQlNSMElnWm05eVpXZHliM1Z1WkNCamIyeHZjaTVjYmlBcUlFQndjbTl3WlhKMGVTQjdablZ1WTNScGIyNG9iblZ0WW1WeUxDQnVkVzFpWlhJc0lHNTFiV0psY2lrNklGTjBlV3hsWkZOMGNtbHVaMzBnWW1kU1oySWdRWEJ3YkdsbGN5QmhiaUJTUjBJZ1ltRmphMmR5YjNWdVpDQmpiMnh2Y2k1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3YzNSeWFXNW5mU0IwWlhoMElGUm9aU0IxYm1SbGNteDVhVzVuSUhSbGVIUWdZMjl1ZEdWdWRDNWNiaUFxWEc0Z0tpQkFiV1Z0WW1WeVQyWWdiVzlrZFd4bE9sTjBlV3hsWkZOMGNtbHVaMXh1SUNvdlhHNWxlSEJ2Y25RZ2RIbHdaU0JEYjJ4dmNtbDZaVTl3ZEdsdmJuTWdQU0I3WEc0Z0lGdHJJR2x1SUd0bGVXOW1JSFI1Y0dWdlppQlRkR0Z1WkdGeVpFWnZjbVZuY205MWJtUkRiMnh2Y25OZE9pQlRkSGxzWldSVGRISnBibWM3WEc1OUlDWWdleUJiYXlCcGJpQnJaWGx2WmlCMGVYQmxiMllnUW5KcFoyaDBSbTl5WldkeWIzVnVaRU52Ykc5eWMxMDZJRk4wZVd4bFpGTjBjbWx1WnlCOUlDWWdlMXh1SUNCYmF5QnBiaUJyWlhsdlppQjBlWEJsYjJZZ1UzUmhibVJoY21SQ1lXTnJaM0p2ZFc1a1EyOXNiM0p6WFRvZ1UzUjViR1ZrVTNSeWFXNW5PMXh1ZlNBbUlIc2dXMnNnYVc0Z2EyVjViMllnZEhsd1pXOW1JRUp5YVdkb2RFSmhZMnRuY205MWJtUkRiMnh2Y25OZE9pQlRkSGxzWldSVGRISnBibWNnZlNBbUlIdGNiaUFnVzJzZ2FXNGdhMlY1YjJZZ2RIbHdaVzltSUhOMGVXeGxjMTA2SUZOMGVXeGxaRk4wY21sdVp6dGNibjBnSmlCN1hHNGdJR05zWldGeU9pQW9LU0E5UGlCVGRIbHNaV1JUZEhKcGJtYzdYRzRnSUhKaGR6b2dLSEpoZHpvZ2MzUnlhVzVuS1NBOVBpQlRkSGxzWldSVGRISnBibWM3WEc0Z0lHWnZjbVZuY205MWJtUTZJQ2h1T2lCdWRXMWlaWElwSUQwK0lGTjBlV3hsWkZOMGNtbHVaenRjYmlBZ1ltRmphMmR5YjNWdVpEb2dLRzQ2SUc1MWJXSmxjaWtnUFQ0Z1UzUjViR1ZrVTNSeWFXNW5PMXh1SUNCemRIbHNaVG9nS0c0NklHNTFiV0psY2lCOElHdGxlVzltSUhSNWNHVnZaaUJ6ZEhsc1pYTXBJRDArSUZOMGVXeGxaRk4wY21sdVp6dGNiaUFnWTI5c2IzSXlOVFk2SUNodU9pQnVkVzFpWlhJcElEMCtJRk4wZVd4bFpGTjBjbWx1Wnp0Y2JpQWdZbWREYjJ4dmNqSTFOam9nS0c0NklHNTFiV0psY2lrZ1BUNGdVM1I1YkdWa1UzUnlhVzVuTzF4dUlDQnlaMkk2SUNoeU9pQnVkVzFpWlhJc0lHYzZJRzUxYldKbGNpd2dZam9nYm5WdFltVnlLU0E5UGlCVGRIbHNaV1JUZEhKcGJtYzdYRzRnSUdKblVtZGlPaUFvY2pvZ2JuVnRZbVZ5TENCbk9pQnVkVzFpWlhJc0lHSTZJRzUxYldKbGNpa2dQVDRnVTNSNWJHVmtVM1J5YVc1bk8xeHVJQ0IwWlhoME9pQnpkSEpwYm1jN1hHNTlPMXh1WEc0dktpcGNiaUFxSUVCamJHRnpjeUJUZEhsc1pXUlRkSEpwYm1kY2JpQXFJRUJrWlhOamNtbHdkR2x2YmlCQklHTnNZWE56SUhSb1lYUWdaWGgwWlc1a2N5QnpkSEpwYm1jZ1puVnVZM1JwYjI1aGJHbDBlU0IzYVhSb0lFRk9VMGtnWTI5c2IzSWdZVzVrSUhOMGVXeGxJRzl3ZEdsdmJuTXVYRzRnS2lCQWMzVnRiV0Z5ZVNCVGRIbHNaV1JUZEhKcGJtY2djSEp2ZG1sa1pYTWdiV1YwYUc5a2N5QjBieUJoY0hCc2VTQjJZWEpwYjNWeklFRk9VMGtnWTI5c2IzSWdZVzVrSUhOMGVXeGxJRzl3ZEdsdmJuTWdkRzhnZEdWNGRDQnpkSEpwYm1kekxseHVJQ29nU1hRZ2FXMXdiR1Z0Wlc1MGN5QjBhR1VnUTI5c2IzSnBlbVZQY0hScGIyNXpJR2x1ZEdWeVptRmpaU0JoYm1RZ2NISnZlR2xsY3lCdVlYUnBkbVVnYzNSeWFXNW5JRzFsZEdodlpITWdkRzhnZEdobElIVnVaR1Z5YkhscGJtY2dkR1Y0ZEM1Y2JpQXFJRlJvYVhNZ1kyeGhjM01nWVd4c2IzZHpJR1p2Y2lCamFHRnBibWx1WnlCdlppQnpkSGxzYVc1bklHMWxkR2h2WkhNZ1lXNWtJR1ZoYzNrZ1lYQndiR2xqWVhScGIyNGdiMllnWTI5c2IzSnpJR0Z1WkNCemRIbHNaWE1nZEc4Z2RHVjRkQzVjYmlBcUlGeHVJQ29nUUdsdGNHeGxiV1Z1ZEhNZ2UwTnZiRzl5YVhwbFQzQjBhVzl1YzMxY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQjBaWGgwSUMwZ1ZHaGxJR2x1YVhScFlXd2dkR1Y0ZENCemRISnBibWNnZEc4Z1ltVWdjM1I1YkdWa0xseHVJQ292WEc1bGVIQnZjblFnWTJ4aGMzTWdVM1I1YkdWa1UzUnlhVzVuSUdsdGNHeGxiV1Z1ZEhNZ1EyOXNiM0pwZW1WUGNIUnBiMjV6SUh0Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCQmNIQnNhV1Z6SUdKc1lXTnJJR052Ykc5eUlIUnZJSFJvWlNCMFpYaDBMbHh1SUNBZ0tpQkFjM1Z0YldGeWVTQkhaWFIwWlhJZ2RHaGhkQ0J5WlhSMWNtNXpJR0VnYm1WM0lGTjBlV3hsWkZOMGNtbHVaeUIzYVhSb0lHSnNZV05ySUdadmNtVm5jbTkxYm1RZ1kyOXNiM0l1WEc0Z0lDQXFMMXh1SUNCaWJHRmpheUU2SUZOMGVXeGxaRk4wY21sdVp6dGNibHh1SUNBdktpcGNiaUFnSUNvZ1FHUmxjMk55YVhCMGFXOXVJRUZ3Y0d4cFpYTWdjbVZrSUdOdmJHOXlJSFJ2SUhSb1pTQjBaWGgwTGx4dUlDQWdLaUJBYzNWdGJXRnllU0JIWlhSMFpYSWdkR2hoZENCeVpYUjFjbTV6SUdFZ2JtVjNJRk4wZVd4bFpGTjBjbWx1WnlCM2FYUm9JSEpsWkNCbWIzSmxaM0p2ZFc1a0lHTnZiRzl5TGx4dUlDQWdLaTljYmlBZ2NtVmtJVG9nVTNSNWJHVmtVM1J5YVc1bk8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdRWEJ3YkdsbGN5Qm5jbVZsYmlCamIyeHZjaUIwYnlCMGFHVWdkR1Y0ZEM1Y2JpQWdJQ29nUUhOMWJXMWhjbmtnUjJWMGRHVnlJSFJvWVhRZ2NtVjBkWEp1Y3lCaElHNWxkeUJUZEhsc1pXUlRkSEpwYm1jZ2QybDBhQ0JuY21WbGJpQm1iM0psWjNKdmRXNWtJR052Ykc5eUxseHVJQ0FnS2k5Y2JpQWdaM0psWlc0aE9pQlRkSGxzWldSVGRISnBibWM3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCQmNIQnNhV1Z6SUhsbGJHeHZkeUJqYjJ4dmNpQjBieUIwYUdVZ2RHVjRkQzVjYmlBZ0lDb2dRSE4xYlcxaGNua2dSMlYwZEdWeUlIUm9ZWFFnY21WMGRYSnVjeUJoSUc1bGR5QlRkSGxzWldSVGRISnBibWNnZDJsMGFDQjVaV3hzYjNjZ1ptOXlaV2R5YjNWdVpDQmpiMnh2Y2k1Y2JpQWdJQ292WEc0Z0lIbGxiR3h2ZHlFNklGTjBlV3hsWkZOMGNtbHVaenRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUVGd2NHeHBaWE1nWW14MVpTQmpiMnh2Y2lCMGJ5QjBhR1VnZEdWNGRDNWNiaUFnSUNvZ1FITjFiVzFoY25rZ1IyVjBkR1Z5SUhSb1lYUWdjbVYwZFhKdWN5QmhJRzVsZHlCVGRIbHNaV1JUZEhKcGJtY2dkMmwwYUNCaWJIVmxJR1p2Y21WbmNtOTFibVFnWTI5c2IzSXVYRzRnSUNBcUwxeHVJQ0JpYkhWbElUb2dVM1I1YkdWa1UzUnlhVzVuTzF4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1FYQndiR2xsY3lCdFlXZGxiblJoSUdOdmJHOXlJSFJ2SUhSb1pTQjBaWGgwTGx4dUlDQWdLaUJBYzNWdGJXRnllU0JIWlhSMFpYSWdkR2hoZENCeVpYUjFjbTV6SUdFZ2JtVjNJRk4wZVd4bFpGTjBjbWx1WnlCM2FYUm9JRzFoWjJWdWRHRWdabTl5WldkeWIzVnVaQ0JqYjJ4dmNpNWNiaUFnSUNvdlhHNGdJRzFoWjJWdWRHRWhPaUJUZEhsc1pXUlRkSEpwYm1jN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQkJjSEJzYVdWeklHTjVZVzRnWTI5c2IzSWdkRzhnZEdobElIUmxlSFF1WEc0Z0lDQXFJRUJ6ZFcxdFlYSjVJRWRsZEhSbGNpQjBhR0YwSUhKbGRIVnlibk1nWVNCdVpYY2dVM1I1YkdWa1UzUnlhVzVuSUhkcGRHZ2dZM2xoYmlCbWIzSmxaM0p2ZFc1a0lHTnZiRzl5TGx4dUlDQWdLaTljYmlBZ1kzbGhiaUU2SUZOMGVXeGxaRk4wY21sdVp6dGNibHh1SUNBdktpcGNiaUFnSUNvZ1FHUmxjMk55YVhCMGFXOXVJRUZ3Y0d4cFpYTWdkMmhwZEdVZ1kyOXNiM0lnZEc4Z2RHaGxJSFJsZUhRdVhHNGdJQ0FxSUVCemRXMXRZWEo1SUVkbGRIUmxjaUIwYUdGMElISmxkSFZ5Ym5NZ1lTQnVaWGNnVTNSNWJHVmtVM1J5YVc1bklIZHBkR2dnZDJocGRHVWdabTl5WldkeWIzVnVaQ0JqYjJ4dmNpNWNiaUFnSUNvdlhHNGdJSGRvYVhSbElUb2dVM1I1YkdWa1UzUnlhVzVuTzF4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1FYQndiR2xsY3lCaWNtbG5hSFFnWW14aFkyc2dLR2R5WVhrcElHTnZiRzl5SUhSdklIUm9aU0IwWlhoMExseHVJQ0FnS2lCQWMzVnRiV0Z5ZVNCSFpYUjBaWElnZEdoaGRDQnlaWFIxY201eklHRWdibVYzSUZOMGVXeGxaRk4wY21sdVp5QjNhWFJvSUdKeWFXZG9kQ0JpYkdGamF5Qm1iM0psWjNKdmRXNWtJR052Ykc5eUxseHVJQ0FnS2k5Y2JpQWdZbkpwWjJoMFFteGhZMnNoT2lCVGRIbHNaV1JUZEhKcGJtYzdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJCY0hCc2FXVnpJR0p5YVdkb2RDQnlaV1FnWTI5c2IzSWdkRzhnZEdobElIUmxlSFF1WEc0Z0lDQXFJRUJ6ZFcxdFlYSjVJRWRsZEhSbGNpQjBhR0YwSUhKbGRIVnlibk1nWVNCdVpYY2dVM1I1YkdWa1UzUnlhVzVuSUhkcGRHZ2dZbkpwWjJoMElISmxaQ0JtYjNKbFozSnZkVzVrSUdOdmJHOXlMbHh1SUNBZ0tpOWNiaUFnWW5KcFoyaDBVbVZrSVRvZ1UzUjViR1ZrVTNSeWFXNW5PMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnUVhCd2JHbGxjeUJpY21sbmFIUWdaM0psWlc0Z1kyOXNiM0lnZEc4Z2RHaGxJSFJsZUhRdVhHNGdJQ0FxSUVCemRXMXRZWEo1SUVkbGRIUmxjaUIwYUdGMElISmxkSFZ5Ym5NZ1lTQnVaWGNnVTNSNWJHVmtVM1J5YVc1bklIZHBkR2dnWW5KcFoyaDBJR2R5WldWdUlHWnZjbVZuY205MWJtUWdZMjlzYjNJdVhHNGdJQ0FxTDF4dUlDQmljbWxuYUhSSGNtVmxiaUU2SUZOMGVXeGxaRk4wY21sdVp6dGNibHh1SUNBdktpcGNiaUFnSUNvZ1FHUmxjMk55YVhCMGFXOXVJRUZ3Y0d4cFpYTWdZbkpwWjJoMElIbGxiR3h2ZHlCamIyeHZjaUIwYnlCMGFHVWdkR1Y0ZEM1Y2JpQWdJQ29nUUhOMWJXMWhjbmtnUjJWMGRHVnlJSFJvWVhRZ2NtVjBkWEp1Y3lCaElHNWxkeUJUZEhsc1pXUlRkSEpwYm1jZ2QybDBhQ0JpY21sbmFIUWdlV1ZzYkc5M0lHWnZjbVZuY205MWJtUWdZMjlzYjNJdVhHNGdJQ0FxTDF4dUlDQmljbWxuYUhSWlpXeHNiM2NoT2lCVGRIbHNaV1JUZEhKcGJtYzdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJCY0hCc2FXVnpJR0p5YVdkb2RDQmliSFZsSUdOdmJHOXlJSFJ2SUhSb1pTQjBaWGgwTGx4dUlDQWdLaUJBYzNWdGJXRnllU0JIWlhSMFpYSWdkR2hoZENCeVpYUjFjbTV6SUdFZ2JtVjNJRk4wZVd4bFpGTjBjbWx1WnlCM2FYUm9JR0p5YVdkb2RDQmliSFZsSUdadmNtVm5jbTkxYm1RZ1kyOXNiM0l1WEc0Z0lDQXFMMXh1SUNCaWNtbG5hSFJDYkhWbElUb2dVM1I1YkdWa1UzUnlhVzVuTzF4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1FYQndiR2xsY3lCaWNtbG5hSFFnYldGblpXNTBZU0JqYjJ4dmNpQjBieUIwYUdVZ2RHVjRkQzVjYmlBZ0lDb2dRSE4xYlcxaGNua2dSMlYwZEdWeUlIUm9ZWFFnY21WMGRYSnVjeUJoSUc1bGR5QlRkSGxzWldSVGRISnBibWNnZDJsMGFDQmljbWxuYUhRZ2JXRm5aVzUwWVNCbWIzSmxaM0p2ZFc1a0lHTnZiRzl5TGx4dUlDQWdLaTljYmlBZ1luSnBaMmgwVFdGblpXNTBZU0U2SUZOMGVXeGxaRk4wY21sdVp6dGNibHh1SUNBdktpcGNiaUFnSUNvZ1FHUmxjMk55YVhCMGFXOXVJRUZ3Y0d4cFpYTWdZbkpwWjJoMElHTjVZVzRnWTI5c2IzSWdkRzhnZEdobElIUmxlSFF1WEc0Z0lDQXFJRUJ6ZFcxdFlYSjVJRWRsZEhSbGNpQjBhR0YwSUhKbGRIVnlibk1nWVNCdVpYY2dVM1I1YkdWa1UzUnlhVzVuSUhkcGRHZ2dZbkpwWjJoMElHTjVZVzRnWm05eVpXZHliM1Z1WkNCamIyeHZjaTVjYmlBZ0lDb3ZYRzRnSUdKeWFXZG9kRU41WVc0aE9pQlRkSGxzWldSVGRISnBibWM3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCQmNIQnNhV1Z6SUdKeWFXZG9kQ0IzYUdsMFpTQmpiMnh2Y2lCMGJ5QjBhR1VnZEdWNGRDNWNiaUFnSUNvZ1FITjFiVzFoY25rZ1IyVjBkR1Z5SUhSb1lYUWdjbVYwZFhKdWN5QmhJRzVsZHlCVGRIbHNaV1JUZEhKcGJtY2dkMmwwYUNCaWNtbG5hSFFnZDJocGRHVWdabTl5WldkeWIzVnVaQ0JqYjJ4dmNpNWNiaUFnSUNvdlhHNGdJR0p5YVdkb2RGZG9hWFJsSVRvZ1UzUjViR1ZrVTNSeWFXNW5PMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnUVhCd2JHbGxjeUJpYkdGamF5QmlZV05yWjNKdmRXNWtJR052Ykc5eUlIUnZJSFJvWlNCMFpYaDBMbHh1SUNBZ0tpQkFjM1Z0YldGeWVTQkhaWFIwWlhJZ2RHaGhkQ0J5WlhSMWNtNXpJR0VnYm1WM0lGTjBlV3hsWkZOMGNtbHVaeUIzYVhSb0lHSnNZV05ySUdKaFkydG5jbTkxYm1RZ1kyOXNiM0l1WEc0Z0lDQXFMMXh1SUNCaVowSnNZV05ySVRvZ1UzUjViR1ZrVTNSeWFXNW5PMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnUVhCd2JHbGxjeUJ5WldRZ1ltRmphMmR5YjNWdVpDQmpiMnh2Y2lCMGJ5QjBhR1VnZEdWNGRDNWNiaUFnSUNvZ1FITjFiVzFoY25rZ1IyVjBkR1Z5SUhSb1lYUWdjbVYwZFhKdWN5QmhJRzVsZHlCVGRIbHNaV1JUZEhKcGJtY2dkMmwwYUNCeVpXUWdZbUZqYTJkeWIzVnVaQ0JqYjJ4dmNpNWNiaUFnSUNvdlhHNGdJR0puVW1Wa0lUb2dVM1I1YkdWa1UzUnlhVzVuTzF4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1FYQndiR2xsY3lCbmNtVmxiaUJpWVdOclozSnZkVzVrSUdOdmJHOXlJSFJ2SUhSb1pTQjBaWGgwTGx4dUlDQWdLaUJBYzNWdGJXRnllU0JIWlhSMFpYSWdkR2hoZENCeVpYUjFjbTV6SUdFZ2JtVjNJRk4wZVd4bFpGTjBjbWx1WnlCM2FYUm9JR2R5WldWdUlHSmhZMnRuY205MWJtUWdZMjlzYjNJdVhHNGdJQ0FxTDF4dUlDQmlaMGR5WldWdUlUb2dVM1I1YkdWa1UzUnlhVzVuTzF4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1FYQndiR2xsY3lCNVpXeHNiM2NnWW1GamEyZHliM1Z1WkNCamIyeHZjaUIwYnlCMGFHVWdkR1Y0ZEM1Y2JpQWdJQ29nUUhOMWJXMWhjbmtnUjJWMGRHVnlJSFJvWVhRZ2NtVjBkWEp1Y3lCaElHNWxkeUJUZEhsc1pXUlRkSEpwYm1jZ2QybDBhQ0I1Wld4c2IzY2dZbUZqYTJkeWIzVnVaQ0JqYjJ4dmNpNWNiaUFnSUNvdlhHNGdJR0puV1dWc2JHOTNJVG9nVTNSNWJHVmtVM1J5YVc1bk8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdRWEJ3YkdsbGN5QmliSFZsSUdKaFkydG5jbTkxYm1RZ1kyOXNiM0lnZEc4Z2RHaGxJSFJsZUhRdVhHNGdJQ0FxSUVCemRXMXRZWEo1SUVkbGRIUmxjaUIwYUdGMElISmxkSFZ5Ym5NZ1lTQnVaWGNnVTNSNWJHVmtVM1J5YVc1bklIZHBkR2dnWW14MVpTQmlZV05yWjNKdmRXNWtJR052Ykc5eUxseHVJQ0FnS2k5Y2JpQWdZbWRDYkhWbElUb2dVM1I1YkdWa1UzUnlhVzVuTzF4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1FYQndiR2xsY3lCdFlXZGxiblJoSUdKaFkydG5jbTkxYm1RZ1kyOXNiM0lnZEc4Z2RHaGxJSFJsZUhRdVhHNGdJQ0FxSUVCemRXMXRZWEo1SUVkbGRIUmxjaUIwYUdGMElISmxkSFZ5Ym5NZ1lTQnVaWGNnVTNSNWJHVmtVM1J5YVc1bklIZHBkR2dnYldGblpXNTBZU0JpWVdOclozSnZkVzVrSUdOdmJHOXlMbHh1SUNBZ0tpOWNiaUFnWW1kTllXZGxiblJoSVRvZ1UzUjViR1ZrVTNSeWFXNW5PMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnUVhCd2JHbGxjeUJqZVdGdUlHSmhZMnRuY205MWJtUWdZMjlzYjNJZ2RHOGdkR2hsSUhSbGVIUXVYRzRnSUNBcUlFQnpkVzF0WVhKNUlFZGxkSFJsY2lCMGFHRjBJSEpsZEhWeWJuTWdZU0J1WlhjZ1UzUjViR1ZrVTNSeWFXNW5JSGRwZEdnZ1kzbGhiaUJpWVdOclozSnZkVzVrSUdOdmJHOXlMbHh1SUNBZ0tpOWNiaUFnWW1kRGVXRnVJVG9nVTNSNWJHVmtVM1J5YVc1bk8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdRWEJ3YkdsbGN5QjNhR2wwWlNCaVlXTnJaM0p2ZFc1a0lHTnZiRzl5SUhSdklIUm9aU0IwWlhoMExseHVJQ0FnS2lCQWMzVnRiV0Z5ZVNCSFpYUjBaWElnZEdoaGRDQnlaWFIxY201eklHRWdibVYzSUZOMGVXeGxaRk4wY21sdVp5QjNhWFJvSUhkb2FYUmxJR0poWTJ0bmNtOTFibVFnWTI5c2IzSXVYRzRnSUNBcUwxeHVJQ0JpWjFkb2FYUmxJVG9nVTNSNWJHVmtVM1J5YVc1bk8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdRWEJ3YkdsbGN5QmljbWxuYUhRZ1lteGhZMnNnS0dkeVlYa3BJR0poWTJ0bmNtOTFibVFnWTI5c2IzSWdkRzhnZEdobElIUmxlSFF1WEc0Z0lDQXFJRUJ6ZFcxdFlYSjVJRWRsZEhSbGNpQjBhR0YwSUhKbGRIVnlibk1nWVNCdVpYY2dVM1I1YkdWa1UzUnlhVzVuSUhkcGRHZ2dZbkpwWjJoMElHSnNZV05ySUdKaFkydG5jbTkxYm1RZ1kyOXNiM0l1WEc0Z0lDQXFMMXh1SUNCaVowSnlhV2RvZEVKc1lXTnJJVG9nVTNSNWJHVmtVM1J5YVc1bk8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdRWEJ3YkdsbGN5QmljbWxuYUhRZ2NtVmtJR0poWTJ0bmNtOTFibVFnWTI5c2IzSWdkRzhnZEdobElIUmxlSFF1WEc0Z0lDQXFJRUJ6ZFcxdFlYSjVJRWRsZEhSbGNpQjBhR0YwSUhKbGRIVnlibk1nWVNCdVpYY2dVM1I1YkdWa1UzUnlhVzVuSUhkcGRHZ2dZbkpwWjJoMElISmxaQ0JpWVdOclozSnZkVzVrSUdOdmJHOXlMbHh1SUNBZ0tpOWNiaUFnWW1kQ2NtbG5hSFJTWldRaE9pQlRkSGxzWldSVGRISnBibWM3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCQmNIQnNhV1Z6SUdKeWFXZG9kQ0JuY21WbGJpQmlZV05yWjNKdmRXNWtJR052Ykc5eUlIUnZJSFJvWlNCMFpYaDBMbHh1SUNBZ0tpQkFjM1Z0YldGeWVTQkhaWFIwWlhJZ2RHaGhkQ0J5WlhSMWNtNXpJR0VnYm1WM0lGTjBlV3hsWkZOMGNtbHVaeUIzYVhSb0lHSnlhV2RvZENCbmNtVmxiaUJpWVdOclozSnZkVzVrSUdOdmJHOXlMbHh1SUNBZ0tpOWNiaUFnWW1kQ2NtbG5hSFJIY21WbGJpRTZJRk4wZVd4bFpGTjBjbWx1Wnp0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlFRndjR3hwWlhNZ1luSnBaMmgwSUhsbGJHeHZkeUJpWVdOclozSnZkVzVrSUdOdmJHOXlJSFJ2SUhSb1pTQjBaWGgwTGx4dUlDQWdLaUJBYzNWdGJXRnllU0JIWlhSMFpYSWdkR2hoZENCeVpYUjFjbTV6SUdFZ2JtVjNJRk4wZVd4bFpGTjBjbWx1WnlCM2FYUm9JR0p5YVdkb2RDQjVaV3hzYjNjZ1ltRmphMmR5YjNWdVpDQmpiMnh2Y2k1Y2JpQWdJQ292WEc0Z0lHSm5RbkpwWjJoMFdXVnNiRzkzSVRvZ1UzUjViR1ZrVTNSeWFXNW5PMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnUVhCd2JHbGxjeUJpY21sbmFIUWdZbXgxWlNCaVlXTnJaM0p2ZFc1a0lHTnZiRzl5SUhSdklIUm9aU0IwWlhoMExseHVJQ0FnS2lCQWMzVnRiV0Z5ZVNCSFpYUjBaWElnZEdoaGRDQnlaWFIxY201eklHRWdibVYzSUZOMGVXeGxaRk4wY21sdVp5QjNhWFJvSUdKeWFXZG9kQ0JpYkhWbElHSmhZMnRuY205MWJtUWdZMjlzYjNJdVhHNGdJQ0FxTDF4dUlDQmlaMEp5YVdkb2RFSnNkV1VoT2lCVGRIbHNaV1JUZEhKcGJtYzdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJCY0hCc2FXVnpJR0p5YVdkb2RDQnRZV2RsYm5SaElHSmhZMnRuY205MWJtUWdZMjlzYjNJZ2RHOGdkR2hsSUhSbGVIUXVYRzRnSUNBcUlFQnpkVzF0WVhKNUlFZGxkSFJsY2lCMGFHRjBJSEpsZEhWeWJuTWdZU0J1WlhjZ1UzUjViR1ZrVTNSeWFXNW5JSGRwZEdnZ1luSnBaMmgwSUcxaFoyVnVkR0VnWW1GamEyZHliM1Z1WkNCamIyeHZjaTVjYmlBZ0lDb3ZYRzRnSUdKblFuSnBaMmgwVFdGblpXNTBZU0U2SUZOMGVXeGxaRk4wY21sdVp6dGNibHh1SUNBdktpcGNiaUFnSUNvZ1FHUmxjMk55YVhCMGFXOXVJRUZ3Y0d4cFpYTWdZbkpwWjJoMElHTjVZVzRnWW1GamEyZHliM1Z1WkNCamIyeHZjaUIwYnlCMGFHVWdkR1Y0ZEM1Y2JpQWdJQ29nUUhOMWJXMWhjbmtnUjJWMGRHVnlJSFJvWVhRZ2NtVjBkWEp1Y3lCaElHNWxkeUJUZEhsc1pXUlRkSEpwYm1jZ2QybDBhQ0JpY21sbmFIUWdZM2xoYmlCaVlXTnJaM0p2ZFc1a0lHTnZiRzl5TGx4dUlDQWdLaTljYmlBZ1ltZENjbWxuYUhSRGVXRnVJVG9nVTNSNWJHVmtVM1J5YVc1bk8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdRWEJ3YkdsbGN5QmljbWxuYUhRZ2QyaHBkR1VnWW1GamEyZHliM1Z1WkNCamIyeHZjaUIwYnlCMGFHVWdkR1Y0ZEM1Y2JpQWdJQ29nUUhOMWJXMWhjbmtnUjJWMGRHVnlJSFJvWVhRZ2NtVjBkWEp1Y3lCaElHNWxkeUJUZEhsc1pXUlRkSEpwYm1jZ2QybDBhQ0JpY21sbmFIUWdkMmhwZEdVZ1ltRmphMmR5YjNWdVpDQmpiMnh2Y2k1Y2JpQWdJQ292WEc0Z0lHSm5RbkpwWjJoMFYyaHBkR1VoT2lCVGRIbHNaV1JUZEhKcGJtYzdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJTWlhObGRITWdZV3hzSUhOMGVXeHBibWNnWVhCd2JHbGxaQ0IwYnlCMGFHVWdkR1Y0ZEM1Y2JpQWdJQ29nUUhOMWJXMWhjbmtnUjJWMGRHVnlJSFJvWVhRZ2NtVjBkWEp1Y3lCaElHNWxkeUJUZEhsc1pXUlRkSEpwYm1jZ2QybDBhQ0JoYkd3Z2MzUjViR2x1WnlCeVpYTmxkQzVjYmlBZ0lDb3ZYRzRnSUhKbGMyVjBJVG9nVTNSNWJHVmtVM1J5YVc1bk8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdRWEJ3YkdsbGN5QmliMnhrSUhOMGVXeGxJSFJ2SUhSb1pTQjBaWGgwTGx4dUlDQWdLaUJBYzNWdGJXRnllU0JIWlhSMFpYSWdkR2hoZENCeVpYUjFjbTV6SUdFZ2JtVjNJRk4wZVd4bFpGTjBjbWx1WnlCM2FYUm9JR0p2YkdRZ2MzUjViR1V1WEc0Z0lDQXFMMXh1SUNCaWIyeGtJVG9nVTNSNWJHVmtVM1J5YVc1bk8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdRWEJ3YkdsbGN5QmthVzBnS0dSbFkzSmxZWE5sWkNCcGJuUmxibk5wZEhrcElITjBlV3hsSUhSdklIUm9aU0IwWlhoMExseHVJQ0FnS2lCQWMzVnRiV0Z5ZVNCSFpYUjBaWElnZEdoaGRDQnlaWFIxY201eklHRWdibVYzSUZOMGVXeGxaRk4wY21sdVp5QjNhWFJvSUdScGJTQnpkSGxzWlM1Y2JpQWdJQ292WEc0Z0lHUnBiU0U2SUZOMGVXeGxaRk4wY21sdVp6dGNibHh1SUNBdktpcGNiaUFnSUNvZ1FHUmxjMk55YVhCMGFXOXVJRUZ3Y0d4cFpYTWdhWFJoYkdsaklITjBlV3hsSUhSdklIUm9aU0IwWlhoMExseHVJQ0FnS2lCQWMzVnRiV0Z5ZVNCSFpYUjBaWElnZEdoaGRDQnlaWFIxY201eklHRWdibVYzSUZOMGVXeGxaRk4wY21sdVp5QjNhWFJvSUdsMFlXeHBZeUJ6ZEhsc1pTNWNiaUFnSUNvdlhHNGdJR2wwWVd4cFl5RTZJRk4wZVd4bFpGTjBjbWx1Wnp0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlFRndjR3hwWlhNZ2RXNWtaWEpzYVc1bElITjBlV3hsSUhSdklIUm9aU0IwWlhoMExseHVJQ0FnS2lCQWMzVnRiV0Z5ZVNCSFpYUjBaWElnZEdoaGRDQnlaWFIxY201eklHRWdibVYzSUZOMGVXeGxaRk4wY21sdVp5QjNhWFJvSUhWdVpHVnliR2x1WlNCemRIbHNaUzVjYmlBZ0lDb3ZYRzRnSUhWdVpHVnliR2x1WlNFNklGTjBlV3hsWkZOMGNtbHVaenRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUVGd2NHeHBaWE1nWW14cGJtdHBibWNnYzNSNWJHVWdkRzhnZEdobElIUmxlSFF1WEc0Z0lDQXFJRUJ6ZFcxdFlYSjVJRWRsZEhSbGNpQjBhR0YwSUhKbGRIVnlibk1nWVNCdVpYY2dVM1I1YkdWa1UzUnlhVzVuSUhkcGRHZ2dZbXhwYm10cGJtY2djM1I1YkdVdVhHNGdJQ0FxTDF4dUlDQmliR2x1YXlFNklGTjBlV3hsWkZOMGNtbHVaenRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUVsdWRtVnlkSE1nZEdobElHWnZjbVZuY205MWJtUWdZVzVrSUdKaFkydG5jbTkxYm1RZ1kyOXNiM0p6SUc5bUlIUm9aU0IwWlhoMExseHVJQ0FnS2lCQWMzVnRiV0Z5ZVNCSFpYUjBaWElnZEdoaGRDQnlaWFIxY201eklHRWdibVYzSUZOMGVXeGxaRk4wY21sdVp5QjNhWFJvSUdsdWRtVnlkR1ZrSUdOdmJHOXljeTVjYmlBZ0lDb3ZYRzRnSUdsdWRtVnljMlVoT2lCVGRIbHNaV1JUZEhKcGJtYzdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJJYVdSbGN5QjBhR1VnZEdWNGRDQW9jMkZ0WlNCamIyeHZjaUJoY3lCaVlXTnJaM0p2ZFc1a0tTNWNiaUFnSUNvZ1FITjFiVzFoY25rZ1IyVjBkR1Z5SUhSb1lYUWdjbVYwZFhKdWN5QmhJRzVsZHlCVGRIbHNaV1JUZEhKcGJtY2dkMmwwYUNCb2FXUmtaVzRnZEdWNGRDNWNiaUFnSUNvdlhHNGdJR2hwWkdSbGJpRTZJRk4wZVd4bFpGTjBjbWx1Wnp0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlFRndjR3hwWlhNZ2MzUnlhV3RsZEdoeWIzVm5hQ0J6ZEhsc1pTQjBieUIwYUdVZ2RHVjRkQzVjYmlBZ0lDb2dRSE4xYlcxaGNua2dSMlYwZEdWeUlIUm9ZWFFnY21WMGRYSnVjeUJoSUc1bGR5QlRkSGxzWldSVGRISnBibWNnZDJsMGFDQnpkSEpwYTJWMGFISnZkV2RvSUhOMGVXeGxMbHh1SUNBZ0tpOWNiaUFnYzNSeWFXdGxkR2h5YjNWbmFDRTZJRk4wZVd4bFpGTjBjbWx1Wnp0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlFRndjR3hwWlhNZ1pHOTFZbXhsSUhWdVpHVnliR2x1WlNCemRIbHNaU0IwYnlCMGFHVWdkR1Y0ZEM1Y2JpQWdJQ29nUUhOMWJXMWhjbmtnUjJWMGRHVnlJSFJvWVhRZ2NtVjBkWEp1Y3lCaElHNWxkeUJUZEhsc1pXUlRkSEpwYm1jZ2QybDBhQ0JrYjNWaWJHVWdkVzVrWlhKc2FXNWxJSE4wZVd4bExseHVJQ0FnS2k5Y2JpQWdaRzkxWW14bFZXNWtaWEpzYVc1bElUb2dVM1I1YkdWa1UzUnlhVzVuTzF4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1VtVnpaWFJ6SUhSb1pTQjBaWGgwSUdOdmJHOXlJSFJ2SUc1dmNtMWhiQ0JwYm5SbGJuTnBkSGt1WEc0Z0lDQXFJRUJ6ZFcxdFlYSjVJRWRsZEhSbGNpQjBhR0YwSUhKbGRIVnlibk1nWVNCdVpYY2dVM1I1YkdWa1UzUnlhVzVuSUhkcGRHZ2dibTl5YldGc0lHTnZiRzl5SUdsdWRHVnVjMmwwZVM1Y2JpQWdJQ292WEc0Z0lHNXZjbTFoYkVOdmJHOXlJVG9nVTNSNWJHVmtVM1J5YVc1bk8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdVbVZ0YjNabGN5QnBkR0ZzYVdNZ2IzSWdabkpoYTNSMWNpQnpkSGxzWlNCbWNtOXRJSFJvWlNCMFpYaDBMbHh1SUNBZ0tpQkFjM1Z0YldGeWVTQkhaWFIwWlhJZ2RHaGhkQ0J5WlhSMWNtNXpJR0VnYm1WM0lGTjBlV3hsWkZOMGNtbHVaeUIzYVhSb0lHbDBZV3hwWXlCdmNpQm1jbUZyZEhWeUlITjBlV3hsSUhKbGJXOTJaV1F1WEc0Z0lDQXFMMXh1SUNCdWIwbDBZV3hwWTA5eVJuSmhhM1IxY2lFNklGTjBlV3hsWkZOMGNtbHVaenRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUZKbGJXOTJaWE1nZFc1a1pYSnNhVzVsSUhOMGVXeGxJR1p5YjIwZ2RHaGxJSFJsZUhRdVhHNGdJQ0FxSUVCemRXMXRZWEo1SUVkbGRIUmxjaUIwYUdGMElISmxkSFZ5Ym5NZ1lTQnVaWGNnVTNSNWJHVmtVM1J5YVc1bklIZHBkR2dnZFc1a1pYSnNhVzVsSUhOMGVXeGxJSEpsYlc5MlpXUXVYRzRnSUNBcUwxeHVJQ0J1YjFWdVpHVnliR2x1WlNFNklGTjBlV3hsWkZOMGNtbHVaenRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUZKbGJXOTJaWE1nWW14cGJtdHBibWNnYzNSNWJHVWdabkp2YlNCMGFHVWdkR1Y0ZEM1Y2JpQWdJQ29nUUhOMWJXMWhjbmtnUjJWMGRHVnlJSFJvWVhRZ2NtVjBkWEp1Y3lCaElHNWxkeUJUZEhsc1pXUlRkSEpwYm1jZ2QybDBhQ0JpYkdsdWEybHVaeUJ6ZEhsc1pTQnlaVzF2ZG1Wa0xseHVJQ0FnS2k5Y2JpQWdibTlDYkdsdWF5RTZJRk4wZVd4bFpGTjBjbWx1Wnp0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlGSmxiVzkyWlhNZ1kyOXNiM0lnYVc1MlpYSnphVzl1SUdaeWIyMGdkR2hsSUhSbGVIUXVYRzRnSUNBcUlFQnpkVzF0WVhKNUlFZGxkSFJsY2lCMGFHRjBJSEpsZEhWeWJuTWdZU0J1WlhjZ1UzUjViR1ZrVTNSeWFXNW5JSGRwZEdnZ1kyOXNiM0lnYVc1MlpYSnphVzl1SUhKbGJXOTJaV1F1WEc0Z0lDQXFMMXh1SUNCdWIwbHVkbVZ5YzJVaE9pQlRkSGxzWldSVGRISnBibWM3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCU1pXMXZkbVZ6SUdocFpHUmxiaUJ6ZEhsc1pTQm1jbTl0SUhSb1pTQjBaWGgwTGx4dUlDQWdLaUJBYzNWdGJXRnllU0JIWlhSMFpYSWdkR2hoZENCeVpYUjFjbTV6SUdFZ2JtVjNJRk4wZVd4bFpGTjBjbWx1WnlCM2FYUm9JR2hwWkdSbGJpQnpkSGxzWlNCeVpXMXZkbVZrTGx4dUlDQWdLaTljYmlBZ2JtOUlhV1JrWlc0aE9pQlRkSGxzWldSVGRISnBibWM3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCU1pXMXZkbVZ6SUhOMGNtbHJaWFJvY205MVoyZ2djM1I1YkdVZ1puSnZiU0IwYUdVZ2RHVjRkQzVjYmlBZ0lDb2dRSE4xYlcxaGNua2dSMlYwZEdWeUlIUm9ZWFFnY21WMGRYSnVjeUJoSUc1bGR5QlRkSGxzWldSVGRISnBibWNnZDJsMGFDQnpkSEpwYTJWMGFISnZkV2RvSUhOMGVXeGxJSEpsYlc5MlpXUXVYRzRnSUNBcUwxeHVJQ0J1YjFOMGNtbHJaWFJvY205MVoyZ2hPaUJUZEhsc1pXUlRkSEpwYm1jN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQlVhR1VnZEdWNGRGeHVJQ0FnS2lCQWMzVnRiV0Z5ZVNCVWFHVWdjM1I1YkdWa0lIUmxlSFFnWVhNZ1lTQnlaV2QxYkdGeUlITjBjbWx1Wnk1Y2JpQWdJQ292WEc0Z0lIUmxlSFFoT2lCemRISnBibWM3WEc1Y2JpQWdZMjl1YzNSeWRXTjBiM0lvZEdWNGREb2djM1J5YVc1bktTQjdYRzRnSUNBZ2RHaHBjeTUwWlhoMElEMGdkR1Y0ZER0Y2JpQWdJQ0F2THlCQ1lYTnBZeUJqYjJ4dmNuTmNiaUFnSUNCUFltcGxZM1F1Wlc1MGNtbGxjeWhUZEdGdVpHRnlaRVp2Y21WbmNtOTFibVJEYjJ4dmNuTXBMbVp2Y2tWaFkyZ29LRnR1WVcxbExDQmpiMlJsWFNrZ1BUNGdlMXh1SUNBZ0lDQWdUMkpxWldOMExtUmxabWx1WlZCeWIzQmxjblI1S0hSb2FYTXNJRzVoYldVc0lIdGNiaUFnSUNBZ0lDQWdaMlYwT2lBb0tTQTlQaUIwYUdsekxtWnZjbVZuY205MWJtUW9ZMjlrWlNrc1hHNGdJQ0FnSUNCOUtUdGNiaUFnSUNCOUtUdGNibHh1SUNBZ0lFOWlhbVZqZEM1bGJuUnlhV1Z6S0VKeWFXZG9kRVp2Y21WbmNtOTFibVJEYjJ4dmNuTXBMbVp2Y2tWaFkyZ29LRnR1WVcxbExDQmpiMlJsWFNrZ1BUNGdlMXh1SUNBZ0lDQWdUMkpxWldOMExtUmxabWx1WlZCeWIzQmxjblI1S0hSb2FYTXNJRzVoYldVc0lIdGNiaUFnSUNBZ0lDQWdaMlYwT2lBb0tTQTlQaUIwYUdsekxtWnZjbVZuY205MWJtUW9ZMjlrWlNrc1hHNGdJQ0FnSUNCOUtUdGNiaUFnSUNCOUtUdGNibHh1SUNBZ0lDOHZJRUpoWTJ0bmNtOTFibVFnWTI5c2IzSnpYRzRnSUNBZ1QySnFaV04wTG1WdWRISnBaWE1vVTNSaGJtUmhjbVJDWVdOclozSnZkVzVrUTI5c2IzSnpLUzVtYjNKRllXTm9LQ2hiYm1GdFpTd2dZMjlrWlYwcElEMCtJSHRjYmlBZ0lDQWdJRTlpYW1WamRDNWtaV1pwYm1WUWNtOXdaWEowZVNoMGFHbHpMQ0J1WVcxbExDQjdYRzRnSUNBZ0lDQWdJR2RsZERvZ0tDa2dQVDRnZEdocGN5NWlZV05yWjNKdmRXNWtLR052WkdVcExGeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ2ZTazdYRzVjYmlBZ0lDQlBZbXBsWTNRdVpXNTBjbWxsY3loQ2NtbG5hSFJDWVdOclozSnZkVzVrUTI5c2IzSnpLUzVtYjNKRllXTm9LQ2hiYm1GdFpTd2dZMjlrWlYwcElEMCtJSHRjYmlBZ0lDQWdJRTlpYW1WamRDNWtaV1pwYm1WUWNtOXdaWEowZVNoMGFHbHpMQ0J1WVcxbExDQjdYRzRnSUNBZ0lDQWdJR2RsZERvZ0tDa2dQVDRnZEdocGN5NWlZV05yWjNKdmRXNWtLR052WkdVcExGeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ2ZTazdYRzVjYmlBZ0lDQXZMeUJUZEhsc1pYTmNiaUFnSUNCUFltcGxZM1F1Wlc1MGNtbGxjeWh6ZEhsc1pYTXBMbVp2Y2tWaFkyZ29LRnR1WVcxbExDQmpiMlJsWFNrZ1BUNGdlMXh1SUNBZ0lDQWdUMkpxWldOMExtUmxabWx1WlZCeWIzQmxjblI1S0hSb2FYTXNJRzVoYldVc0lIdGNiaUFnSUNBZ0lDQWdaMlYwT2lBb0tTQTlQaUIwYUdsekxuTjBlV3hsS0dOdlpHVXBMRnh1SUNBZ0lDQWdmU2s3WEc0Z0lDQWdmU2s3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1FHUmxjMk55YVhCMGFXOXVJRU5zWldGeWN5QmhiR3dnYzNSNWJHbHVaeUJtY205dElIUm9aU0IwWlhoMExseHVJQ0FnS2lCQWMzVnRiV0Z5ZVNCU1pXMXZkbVZ6SUdGc2JDQkJUbE5KSUdOdmJHOXlJR0Z1WkNCemRIbHNaU0JqYjJSbGN5Qm1jbTl0SUhSb1pTQjBaWGgwTGx4dUlDQWdLaUJBY21WMGRYSnVJSHRUZEhsc1pXUlRkSEpwYm1kOUlGUm9aU0JUZEhsc1pXUlRkSEpwYm1jZ2FXNXpkR0Z1WTJVZ2QybDBhQ0JqYkdWaGNtVmtJSE4wZVd4cGJtY3VYRzRnSUNBcUwxeHVJQ0JqYkdWaGNpZ3BPaUJUZEhsc1pXUlRkSEpwYm1jZ2UxeHVJQ0FnSUhSb2FYTXVkR1Y0ZENBOUlHTnNaV0Z5S0hSb2FYTXVkR1Y0ZENrN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUVGd2NHeHBaWE1nY21GM0lFRk9VMGtnWTI5a1pYTWdkRzhnZEdobElIUmxlSFF1WEc0Z0lDQXFJRUJ6ZFcxdFlYSjVJRUZzYkc5M2N5QmthWEpsWTNRZ1lYQndiR2xqWVhScGIyNGdiMllnUVU1VFNTQmxjMk5oY0dVZ2MyVnhkV1Z1WTJWeklIUnZJSFJvWlNCMFpYaDBMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2NtRjNRVzV6YVNBdElGUm9aU0J5WVhjZ1FVNVRTU0JsYzJOaGNHVWdjMlZ4ZFdWdVkyVWdkRzhnWVhCd2JIa3VYRzRnSUNBcUlFQnlaWFIxY200Z2UxTjBlV3hsWkZOMGNtbHVaMzBnVkdobElGTjBlV3hsWkZOMGNtbHVaeUJwYm5OMFlXNWpaU0IzYVhSb0lIUm9aU0J5WVhjZ1FVNVRTU0JqYjJSbElHRndjR3hwWldRdVhHNGdJQ0FxTDF4dUlDQnlZWGNvY21GM1FXNXphVG9nYzNSeWFXNW5LVG9nVTNSNWJHVmtVM1J5YVc1bklIdGNiaUFnSUNCMGFHbHpMblJsZUhRZ1BTQnlZWGNvZEdocGN5NTBaWGgwTENCeVlYZEJibk5wS1R0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3p0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnUVhCd2JHbGxjeUJoSUdadmNtVm5jbTkxYm1RZ1kyOXNiM0lnZEc4Z2RHaGxJSFJsZUhRdVhHNGdJQ0FxSUVCemRXMXRZWEo1SUZObGRITWdkR2hsSUhSbGVIUWdZMjlzYjNJZ2RYTnBibWNnUVU1VFNTQmpiMnh2Y2lCamIyUmxjeTVjYmlBZ0lDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlHNGdMU0JVYUdVZ1FVNVRTU0JqYjJ4dmNpQmpiMlJsSUdadmNpQjBhR1VnWm05eVpXZHliM1Z1WkNCamIyeHZjaTVjYmlBZ0lDb2dRSEpsZEhWeWJpQjdVM1I1YkdWa1UzUnlhVzVuZlNCVWFHVWdVM1I1YkdWa1UzUnlhVzVuSUdsdWMzUmhibU5sSUhkcGRHZ2dkR2hsSUdadmNtVm5jbTkxYm1RZ1kyOXNiM0lnWVhCd2JHbGxaQzVjYmlBZ0lDb3ZYRzRnSUdadmNtVm5jbTkxYm1Rb2Jqb2diblZ0WW1WeUtUb2dVM1I1YkdWa1UzUnlhVzVuSUh0Y2JpQWdJQ0IwYUdsekxuUmxlSFFnUFNCamIyeHZjbWw2WlVGT1Uwa29kR2hwY3k1MFpYaDBMQ0J1S1R0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3p0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnUVhCd2JHbGxjeUJoSUdKaFkydG5jbTkxYm1RZ1kyOXNiM0lnZEc4Z2RHaGxJSFJsZUhRdVhHNGdJQ0FxSUVCemRXMXRZWEo1SUZObGRITWdkR2hsSUdKaFkydG5jbTkxYm1RZ1kyOXNiM0lnYjJZZ2RHaGxJSFJsZUhRZ2RYTnBibWNnUVU1VFNTQmpiMnh2Y2lCamIyUmxjeTVjYmlBZ0lDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlHNGdMU0JVYUdVZ1FVNVRTU0JqYjJ4dmNpQmpiMlJsSUdadmNpQjBhR1VnWW1GamEyZHliM1Z1WkNCamIyeHZjaTVjYmlBZ0lDb2dRSEpsZEhWeWJpQjdVM1I1YkdWa1UzUnlhVzVuZlNCVWFHVWdVM1I1YkdWa1UzUnlhVzVuSUdsdWMzUmhibU5sSUhkcGRHZ2dkR2hsSUdKaFkydG5jbTkxYm1RZ1kyOXNiM0lnWVhCd2JHbGxaQzVjYmlBZ0lDb3ZYRzRnSUdKaFkydG5jbTkxYm1Rb2Jqb2diblZ0WW1WeUtUb2dVM1I1YkdWa1UzUnlhVzVuSUh0Y2JpQWdJQ0IwYUdsekxuUmxlSFFnUFNCamIyeHZjbWw2WlVGT1Uwa29kR2hwY3k1MFpYaDBMQ0J1TENCMGNuVmxLVHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjenRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdRWEJ3YkdsbGN5QmhJSFJsZUhRZ2MzUjViR1VnZEc4Z2RHaGxJSE4wY21sdVp5NWNiaUFnSUNvZ1FITjFiVzFoY25rZ1UyVjBjeUIwWlhoMElITjBlV3hsY3lCemRXTm9JR0Z6SUdKdmJHUXNJR2wwWVd4cFl5d2diM0lnZFc1a1pYSnNhVzVsSUhWemFXNW5JRUZPVTBrZ2MzUjViR1VnWTI5a1pYTXVYRzRnSUNBcUlFQndZWEpoYlNCN2JuVnRZbVZ5SUh3Z2MzUnlhVzVuZlNCdUlDMGdWR2hsSUhOMGVXeGxJR052WkdVZ2IzSWdhMlY1SUdaeWIyMGdkR2hsSUhOMGVXeGxjeUJ2WW1wbFkzUXVYRzRnSUNBcUlFQnlaWFIxY200Z2UxTjBlV3hsWkZOMGNtbHVaMzBnVkdobElGTjBlV3hsWkZOMGNtbHVaeUJwYm5OMFlXNWpaU0IzYVhSb0lIUm9aU0J6ZEhsc1pTQmhjSEJzYVdWa0xseHVJQ0FnS2k5Y2JpQWdjM1I1YkdVb2Jqb2diblZ0WW1WeUlId2dhMlY1YjJZZ2RIbHdaVzltSUhOMGVXeGxjeWs2SUZOMGVXeGxaRk4wY21sdVp5QjdYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQnVJRDA5UFNCY0luTjBjbWx1WjF3aUlDWW1JQ0VvYmlCcGJpQnpkSGxzWlhNcEtTQjdYRzRnSUNBZ0lDQmpiMjV6YjJ4bExuZGhjbTRvWUVsdWRtRnNhV1FnYzNSNWJHVTZJQ1I3Ym4xZ0tUdGNiaUFnSUNBZ0lISmxkSFZ5YmlCMGFHbHpPMXh1SUNBZ0lIMWNiaUFnSUNCMGFHbHpMblJsZUhRZ1BTQmhjSEJzZVZOMGVXeGxLSFJvYVhNdWRHVjRkQ3dnYmlrN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUVGd2NHeHBaWE1nWVNBeU5UWXRZMjlzYjNJZ1ptOXlaV2R5YjNWdVpDQmpiMnh2Y2lCMGJ5QjBhR1VnZEdWNGRDNWNiaUFnSUNvZ1FITjFiVzFoY25rZ1UyVjBjeUIwYUdVZ2RHVjRkQ0JqYjJ4dmNpQjFjMmx1WnlCMGFHVWdaWGgwWlc1a1pXUWdNalUyTFdOdmJHOXlJSEJoYkdWMGRHVXVYRzRnSUNBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCdUlDMGdWR2hsSUdOdmJHOXlJRzUxYldKbGNpQm1jbTl0SUhSb1pTQXlOVFl0WTI5c2IzSWdjR0ZzWlhSMFpTNWNiaUFnSUNvZ1FISmxkSFZ5YmlCN1UzUjViR1ZrVTNSeWFXNW5mU0JVYUdVZ1UzUjViR1ZrVTNSeWFXNW5JR2x1YzNSaGJtTmxJSGRwZEdnZ2RHaGxJREkxTmkxamIyeHZjaUJtYjNKbFozSnZkVzVrSUdGd2NHeHBaV1F1WEc0Z0lDQXFMMXh1SUNCamIyeHZjakkxTmlodU9pQnVkVzFpWlhJcE9pQlRkSGxzWldSVGRISnBibWNnZTF4dUlDQWdJSFJvYVhNdWRHVjRkQ0E5SUdOdmJHOXlhWHBsTWpVMktIUm9hWE11ZEdWNGRDd2diaWs3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE03WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1FHUmxjMk55YVhCMGFXOXVJRUZ3Y0d4cFpYTWdZU0F5TlRZdFkyOXNiM0lnWW1GamEyZHliM1Z1WkNCamIyeHZjaUIwYnlCMGFHVWdkR1Y0ZEM1Y2JpQWdJQ29nUUhOMWJXMWhjbmtnVTJWMGN5QjBhR1VnWW1GamEyZHliM1Z1WkNCamIyeHZjaUIxYzJsdVp5QjBhR1VnWlhoMFpXNWtaV1FnTWpVMkxXTnZiRzl5SUhCaGJHVjBkR1V1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQnVJQzBnVkdobElHTnZiRzl5SUc1MWJXSmxjaUJtY205dElIUm9aU0F5TlRZdFkyOXNiM0lnY0dGc1pYUjBaUzVjYmlBZ0lDb2dRSEpsZEhWeWJpQjdVM1I1YkdWa1UzUnlhVzVuZlNCVWFHVWdVM1I1YkdWa1UzUnlhVzVuSUdsdWMzUmhibU5sSUhkcGRHZ2dkR2hsSURJMU5pMWpiMnh2Y2lCaVlXTnJaM0p2ZFc1a0lHRndjR3hwWldRdVhHNGdJQ0FxTDF4dUlDQmlaME52Ykc5eU1qVTJLRzQ2SUc1MWJXSmxjaWs2SUZOMGVXeGxaRk4wY21sdVp5QjdYRzRnSUNBZ2RHaHBjeTUwWlhoMElEMGdZMjlzYjNKcGVtVXlOVFlvZEdocGN5NTBaWGgwTENCdUxDQjBjblZsS1R0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3p0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnUVhCd2JHbGxjeUJoYmlCU1IwSWdabTl5WldkeWIzVnVaQ0JqYjJ4dmNpQjBieUIwYUdVZ2RHVjRkQzVjYmlBZ0lDb2dRSE4xYlcxaGNua2dVMlYwY3lCMGFHVWdkR1Y0ZENCamIyeHZjaUIxYzJsdVp5QlNSMElnZG1Gc2RXVnpMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyNTFiV0psY24wZ2NpQXRJRlJvWlNCeVpXUWdZMjl0Y0c5dVpXNTBJQ2d3TFRJMU5Ta3VYRzRnSUNBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCbklDMGdWR2hsSUdkeVpXVnVJR052YlhCdmJtVnVkQ0FvTUMweU5UVXBMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyNTFiV0psY24wZ1lpQXRJRlJvWlNCaWJIVmxJR052YlhCdmJtVnVkQ0FvTUMweU5UVXBMbHh1SUNBZ0tpQkFjbVYwZFhKdUlIdFRkSGxzWldSVGRISnBibWQ5SUZSb1pTQlRkSGxzWldSVGRISnBibWNnYVc1emRHRnVZMlVnZDJsMGFDQjBhR1VnVWtkQ0lHWnZjbVZuY205MWJtUWdZMjlzYjNJZ1lYQndiR2xsWkM1Y2JpQWdJQ292WEc0Z0lISm5ZaWh5T2lCdWRXMWlaWElzSUdjNklHNTFiV0psY2l3Z1lqb2diblZ0WW1WeUtUb2dVM1I1YkdWa1UzUnlhVzVuSUh0Y2JpQWdJQ0IwYUdsekxuUmxlSFFnUFNCamIyeHZjbWw2WlZKSFFpaDBhR2x6TG5SbGVIUXNJSElzSUdjc0lHSXBPMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQkJjSEJzYVdWeklHRnVJRkpIUWlCaVlXTnJaM0p2ZFc1a0lHTnZiRzl5SUhSdklIUm9aU0IwWlhoMExseHVJQ0FnS2lCQWMzVnRiV0Z5ZVNCVFpYUnpJSFJvWlNCaVlXTnJaM0p2ZFc1a0lHTnZiRzl5SUhWemFXNW5JRkpIUWlCMllXeDFaWE11WEc0Z0lDQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQnlJQzBnVkdobElISmxaQ0JqYjIxd2IyNWxiblFnS0RBdE1qVTFLUzVjYmlBZ0lDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlHY2dMU0JVYUdVZ1ozSmxaVzRnWTI5dGNHOXVaVzUwSUNnd0xUSTFOU2t1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQmlJQzBnVkdobElHSnNkV1VnWTI5dGNHOXVaVzUwSUNnd0xUSTFOU2t1WEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMU4wZVd4bFpGTjBjbWx1WjMwZ1ZHaGxJRk4wZVd4bFpGTjBjbWx1WnlCcGJuTjBZVzVqWlNCM2FYUm9JSFJvWlNCU1IwSWdZbUZqYTJkeWIzVnVaQ0JqYjJ4dmNpQmhjSEJzYVdWa0xseHVJQ0FnS2k5Y2JpQWdZbWRTWjJJb2Nqb2diblZ0WW1WeUxDQm5PaUJ1ZFcxaVpYSXNJR0k2SUc1MWJXSmxjaWs2SUZOMGVXeGxaRk4wY21sdVp5QjdYRzRnSUNBZ2RHaHBjeTUwWlhoMElEMGdZMjlzYjNKcGVtVlNSMElvZEdocGN5NTBaWGgwTENCeUxDQm5MQ0JpTENCMGNuVmxLVHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjenRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdRMjl1ZG1WeWRITWdkR2hsSUZOMGVXeGxaRk4wY21sdVp5QjBieUJoSUhKbFozVnNZWElnYzNSeWFXNW5MbHh1SUNBZ0tpQkFjM1Z0YldGeWVTQlNaWFIxY201eklIUm9aU0IxYm1SbGNteDVhVzVuSUhSbGVIUWdkMmwwYUNCaGJHd2dZWEJ3YkdsbFpDQnpkSGxzYVc1bkxseHVJQ0FnS2lCQWNtVjBkWEp1SUh0emRISnBibWQ5SUZSb1pTQnpkSGxzWldRZ2RHVjRkQ0JoY3lCaElISmxaM1ZzWVhJZ2MzUnlhVzVuTGx4dUlDQWdLaTljYmlBZ2RHOVRkSEpwYm1jb0tUb2djM1J5YVc1bklIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NTBaWGgwTzF4dUlDQjlYRzU5WEc1Y2JpOHFLbHh1SUNvZ1FHUmxjMk55YVhCMGFXOXVJRUZ3Y0d4cFpYTWdjM1I1YkdsdVp5QjBieUJoSUdkcGRtVnVJSFJsZUhRZ2MzUnlhVzVuTGx4dUlDb2dRSE4xYlcxaGNua2dWR2hwY3lCbWRXNWpkR2x2YmlCMFlXdGxjeUJoSUhOMGNtbHVaeUJoYm1RZ2NtVjBkWEp1Y3lCaElGTjBlV3hsWkZOMGNtbHVaeUJ2WW1wbFkzUXNJSGRvYVdOb0lHbHpJR0Z1SUdWdWFHRnVZMlZrWEc0Z0tpQjJaWEp6YVc5dUlHOW1JSFJvWlNCdmNtbG5hVzVoYkNCemRISnBibWNnZDJsMGFDQmhaR1JwZEdsdmJtRnNJRzFsZEdodlpITWdabTl5SUdGd2NHeDVhVzVuSUhaaGNtbHZkWE1nUVU1VFNTQmpiMnh2Y2lCaGJtUWdjM1I1YkdWY2JpQXFJRzl3ZEdsdmJuTXVJRWwwSUhObGRITWdkWEFnWVNCdFlYQndaWElnYjJKcVpXTjBJSGRwZEdnZ2JXVjBhRzlrY3lCbWIzSWdaR2xtWm1WeVpXNTBJSE4wZVd4cGJtY2diM0JsY21GMGFXOXVjeUJoYm1RZ2RHaGxibHh1SUNvZ1pHVm1hVzVsY3lCd2NtOXdaWEowYVdWeklHOXVJSFJvWlNCMFpYaDBJSE4wY21sdVp5QjBieUJ0WVd0bElIUm9aWE5sSUcxbGRHaHZaSE1nWVdOalpYTnphV0pzWlM1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMXRkZlNCMElDQlVhR1VnYVc1d2RYUWdkR1Y0ZENCMGJ5QmlaU0J6ZEhsc1pXUXVYRzRnS2lCQWNtVjBkWEp1SUh0VGRIbHNaV1JUZEhKcGJtZDlJRUVnVTNSNWJHVmtVM1J5YVc1bklHOWlhbVZqZENCM2FYUm9JR0ZrWkdsMGFXOXVZV3dnYzNSNWJHbHVaeUJ0WlhSb2IyUnpMbHh1SUNwY2JpQXFJRUJtZFc1amRHbHZiaUJ6ZEhsc1pWeHVJQ3BjYmlBcUlFQnRaVzFpWlhKUFppQlRkSGxzWldSVGRISnBibWRjYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlITjBlV3hsS0M0dUxuUTZJSE4wY21sdVoxdGRLVG9nVTNSNWJHVmtVM1J5YVc1bklIdGNiaUFnY21WMGRYSnVJRzVsZHlCVGRIbHNaV1JUZEhKcGJtY29kQzVxYjJsdUtGd2lJRndpS1NrN1hHNTlJbDE5XG4iLCJpbXBvcnQgeyBzdHlsZSB9IGZyb20gXCJzdHlsZWQtc3RyaW5nLWJ1aWxkZXJcIjtcbmltcG9ydCB7IERlZmF1bHRMb2dnaW5nQ29uZmlnLCBEZWZhdWx0VGhlbWUsIExvZ0xldmVsLCBOdW1lcmljTG9nTGV2ZWxzLCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gQSBtaW5pbWFsIGxvZ2dlciBpbXBsZW1lbnRhdGlvbi5cbiAqIEBzdW1tYXJ5IE1pbmlMb2dnZXIgaXMgYSBsaWdodHdlaWdodCBsb2dnaW5nIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgVmVyYm9zaXR5TG9nZ2VyIGludGVyZmFjZS5cbiAqIEl0IHByb3ZpZGVzIGJhc2ljIGxvZ2dpbmcgZnVuY3Rpb25hbGl0eSB3aXRoIHN1cHBvcnQgZm9yIGRpZmZlcmVudCBsb2cgbGV2ZWxzIGFuZCB2ZXJib3NpdHkuXG4gKlxuICogQGNsYXNzXG4gKi9cbmV4cG9ydCBjbGFzcyBNaW5pTG9nZ2VyIHtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBNaW5pTG9nZ2VyIGluc3RhbmNlLlxuICAgICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgTWluaUxvZ2dlciB3aXRoIHRoZSBnaXZlbiBjbGFzcyBuYW1lLCBvcHRpb25hbCBjb25maWd1cmF0aW9uLCBhbmQgbWV0aG9kIG5hbWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyB1c2luZyB0aGlzIGxvZ2dlci5cbiAgICAgKiBAcGFyYW0gW2NvbmZdIC0gT3B0aW9uYWwgbG9nZ2luZyBjb25maWd1cmF0aW9uLiBEZWZhdWx0cyB0byBJbmZvIGxldmVsIGFuZCB2ZXJib3NpdHkgMC5cbiAgICAgKiBAcGFyYW0gW2lkXSAtIE9wdGlvbmFsIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgbG9nZ2VyIGluc3RhbmNlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQsIGNvbmYsIGlkKSB7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIHRoaXMuY29uZiA9IGNvbmY7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICB9XG4gICAgY29uZmlnKGtleSkge1xuICAgICAgICBpZiAodGhpcy5jb25mICYmIGtleSBpbiB0aGlzLmNvbmYpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25mW2tleV07XG4gICAgICAgIHJldHVybiBMb2dnaW5nLmdldENvbmZpZygpW2tleV07XG4gICAgfVxuICAgIGZvcihtZXRob2QsIGNvbmZpZykge1xuICAgICAgICBtZXRob2QgPSBtZXRob2RcbiAgICAgICAgICAgID8gdHlwZW9mIG1ldGhvZCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgID8gbWV0aG9kXG4gICAgICAgICAgICAgICAgOiBtZXRob2QubmFtZVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBMb2dnaW5nLmZvcihbdGhpcy5jb250ZXh0LCBtZXRob2RdLmpvaW4oXCIuXCIpLCB0aGlzLmlkLCBjb25maWcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIGZvcm1hdHRlZCBsb2cgc3RyaW5nLlxuICAgICAqIEBzdW1tYXJ5IEdlbmVyYXRlcyBhIGxvZyBzdHJpbmcgd2l0aCB0aW1lc3RhbXAsIGNvbG9yZWQgbG9nIGxldmVsLCBhbmQgbWVzc2FnZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsZXZlbCAtIFRoZSBsb2cgbGV2ZWwgYXMgYSBzdHJpbmcuXG4gICAgICogQHBhcmFtIG1lc3NhZ2VcbiAgICAgKiBAcGFyYW0gc3RhY2tcbiAgICAgKiBAcmV0dXJuIEEgZm9ybWF0dGVkIGxvZyBzdHJpbmcuXG4gICAgICovXG4gICAgY3JlYXRlTG9nKGxldmVsLCBtZXNzYWdlLCBzdGFjaykge1xuICAgICAgICBjb25zdCBsb2cgPSBbXTtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSB0aGlzLmNvbmZpZyhcInN0eWxlXCIpO1xuICAgICAgICBpZiAodGhpcy5jb25maWcoXCJ0aW1lc3RhbXBcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBzdHlsZSA/IExvZ2dpbmcudGhlbWUoZGF0ZSwgXCJ0aW1lc3RhbXBcIiwgbGV2ZWwpIDogZGF0ZTtcbiAgICAgICAgICAgIGxvZy5wdXNoKHRpbWVzdGFtcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnKFwibG9nTGV2ZWxcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IGx2bCA9IHN0eWxlXG4gICAgICAgICAgICAgICAgPyBMb2dnaW5nLnRoZW1lKGxldmVsLCBcImxvZ0xldmVsXCIsIGxldmVsKVxuICAgICAgICAgICAgICAgIDogbGV2ZWw7XG4gICAgICAgICAgICBsb2cucHVzaChsdmwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZyhcImNvbnRleHRcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBzdHlsZVxuICAgICAgICAgICAgICAgID8gTG9nZ2luZy50aGVtZSh0aGlzLmNvbnRleHQsIFwiY2xhc3NcIiwgbGV2ZWwpXG4gICAgICAgICAgICAgICAgOiB0aGlzLmNvbnRleHQ7XG4gICAgICAgICAgICBsb2cucHVzaChjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pZCkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gc3R5bGVcbiAgICAgICAgICAgICAgICAgICAgPyBMb2dnaW5nLnRoZW1lKHRoaXMuaWQsIFwiaWRcIiwgbGV2ZWwpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5pZDtcbiAgICAgICAgICAgICAgICBsb2cucHVzaChpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbXNnID0gc3R5bGVcbiAgICAgICAgICAgID8gTG9nZ2luZy50aGVtZSh0eXBlb2YgbWVzc2FnZSA9PT0gXCJzdHJpbmdcIiA/IG1lc3NhZ2UgOiBtZXNzYWdlLm1lc3NhZ2UsIFwibWVzc2FnZVwiLCBsZXZlbClcbiAgICAgICAgICAgIDogdHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICA/IG1lc3NhZ2VcbiAgICAgICAgICAgICAgICA6IG1lc3NhZ2UubWVzc2FnZTtcbiAgICAgICAgbG9nLnB1c2gobXNnKTtcbiAgICAgICAgaWYgKHN0YWNrIHx8IG1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgc3RhY2sgPSBzdHlsZVxuICAgICAgICAgICAgICAgID8gTG9nZ2luZy50aGVtZSgoc3RhY2sgfHwgbWVzc2FnZS5zdGFjayksIFwic3RhY2tcIiwgbGV2ZWwpXG4gICAgICAgICAgICAgICAgOiBzdGFjaztcbiAgICAgICAgICAgIGxvZy5wdXNoKGBcXG5TdGFjayB0cmFjZTpcXG4ke3N0YWNrfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2cuam9pbih0aGlzLmNvbmZpZyhcInNlcGFyYXRvclwiKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBMb2dzIGEgbWVzc2FnZSB3aXRoIHRoZSBzcGVjaWZpZWQgbG9nIGxldmVsLlxuICAgICAqIEBzdW1tYXJ5IENoZWNrcyBpZiB0aGUgbWVzc2FnZSBzaG91bGQgYmUgbG9nZ2VkIGJhc2VkIG9uIHRoZSBjdXJyZW50IGxvZyBsZXZlbCxcbiAgICAgKiB0aGVuIHVzZXMgdGhlIGFwcHJvcHJpYXRlIGNvbnNvbGUgbWV0aG9kIHRvIG91dHB1dCB0aGUgbG9nLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxldmVsIC0gVGhlIGxvZyBsZXZlbCBvZiB0aGUgbWVzc2FnZS5cbiAgICAgKiBAcGFyYW0gbXNnIC0gVGhlIG1lc3NhZ2UgdG8gYmUgbG9nZ2VkLlxuICAgICAqIEBwYXJhbSBzdGFja1xuICAgICAqL1xuICAgIGxvZyhsZXZlbCwgbXNnLCBzdGFjaykge1xuICAgICAgICBpZiAoTnVtZXJpY0xvZ0xldmVsc1t0aGlzLmNvbmZpZyhcImxldmVsXCIpXSA8XG4gICAgICAgICAgICBOdW1lcmljTG9nTGV2ZWxzW2xldmVsXSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IG1ldGhvZDtcbiAgICAgICAgc3dpdGNoIChsZXZlbCkge1xuICAgICAgICAgICAgY2FzZSBMb2dMZXZlbC5pbmZvOlxuICAgICAgICAgICAgICAgIG1ldGhvZCA9IGNvbnNvbGUubG9nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBMb2dMZXZlbC52ZXJib3NlOlxuICAgICAgICAgICAgY2FzZSBMb2dMZXZlbC5kZWJ1ZzpcbiAgICAgICAgICAgICAgICBtZXRob2QgPSBjb25zb2xlLmRlYnVnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBMb2dMZXZlbC5lcnJvcjpcbiAgICAgICAgICAgICAgICBtZXRob2QgPSBjb25zb2xlLmVycm9yO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxvZyBsZXZlbFwiKTtcbiAgICAgICAgfVxuICAgICAgICBtZXRob2QodGhpcy5jcmVhdGVMb2cobGV2ZWwsIG1zZywgc3RhY2spKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExMb2dzIGEgYHdheSB0b28gdmVyYm9zZWAgb3IgYSBzaWxseSBtZXNzYWdlLlxuICAgICAqIEBzdW1tYXJ5IExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBTaWxseSBsZXZlbCBpZiB0aGUgY3VycmVudCB2ZXJib3NpdHkgYWxsb3dzIGl0LlxuICAgICAqXG4gICAgICogQHBhcmFtIG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZC5cbiAgICAgKiBAcGFyYW0gdmVyYm9zaXR5IC0gVGhlIHZlcmJvc2l0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZSAoZGVmYXVsdDogMCkuXG4gICAgICovXG4gICAgc2lsbHkobXNnLCB2ZXJib3NpdHkgPSAwKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZyhcInZlcmJvc2VcIikgPj0gdmVyYm9zaXR5KVxuICAgICAgICAgICAgdGhpcy5sb2coTG9nTGV2ZWwudmVyYm9zZSwgbXNnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSB2ZXJib3NlIG1lc3NhZ2UuXG4gICAgICogQHN1bW1hcnkgTG9ncyBhIG1lc3NhZ2UgYXQgdGhlIFZlcmJvc2UgbGV2ZWwgaWYgdGhlIGN1cnJlbnQgdmVyYm9zaXR5IGFsbG93cyBpdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQuXG4gICAgICogQHBhcmFtIHZlcmJvc2l0eSAtIFRoZSB2ZXJib3NpdHkgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UgKGRlZmF1bHQ6IDApLlxuICAgICAqL1xuICAgIHZlcmJvc2UobXNnLCB2ZXJib3NpdHkgPSAwKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZyhcInZlcmJvc2VcIikgPj0gdmVyYm9zaXR5KVxuICAgICAgICAgICAgdGhpcy5sb2coTG9nTGV2ZWwudmVyYm9zZSwgbXNnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYW4gaW5mbyBtZXNzYWdlLlxuICAgICAqIEBzdW1tYXJ5IExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBJbmZvIGxldmVsLlxuICAgICAqXG4gICAgICogQHBhcmFtIG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZC5cbiAgICAgKi9cbiAgICBpbmZvKG1zZykge1xuICAgICAgICB0aGlzLmxvZyhMb2dMZXZlbC5pbmZvLCBtc2cpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhIGRlYnVnIG1lc3NhZ2UuXG4gICAgICogQHN1bW1hcnkgTG9ncyBhIG1lc3NhZ2UgYXQgdGhlIERlYnVnIGxldmVsLlxuICAgICAqXG4gICAgICogQHBhcmFtIG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZC5cbiAgICAgKi9cbiAgICBkZWJ1Zyhtc2cpIHtcbiAgICAgICAgdGhpcy5sb2coTG9nTGV2ZWwuZGVidWcsIG1zZyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBMb2dzIGFuIGVycm9yIG1lc3NhZ2UuXG4gICAgICogQHN1bW1hcnkgTG9ncyBhIG1lc3NhZ2UgYXQgdGhlIEVycm9yIGxldmVsLlxuICAgICAqXG4gICAgICogQHBhcmFtIG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZC5cbiAgICAgKi9cbiAgICBlcnJvcihtc2cpIHtcbiAgICAgICAgdGhpcy5sb2coTG9nTGV2ZWwuZXJyb3IsIG1zZyk7XG4gICAgfVxuICAgIHNldENvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdGhpcy5jb25mID0geyAuLi4odGhpcy5jb25mIHx8IHt9KSwgLi4uY29uZmlnIH07XG4gICAgfVxufVxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQSBzdGF0aWMgY2xhc3MgZm9yIG1hbmFnaW5nIGxvZ2dpbmcgb3BlcmF0aW9ucy5cbiAqIEBzdW1tYXJ5IFRoZSBMb2dnaW5nIGNsYXNzIHByb3ZpZGVzIGEgY2VudHJhbGl6ZWQgbG9nZ2luZyBtZWNoYW5pc20gd2l0aCBzdXBwb3J0IGZvclxuICogZGlmZmVyZW50IGxvZyBsZXZlbHMgYW5kIHZlcmJvc2l0eS4gSXQgdXNlcyBhIHNpbmdsZXRvbiBwYXR0ZXJuIHRvIG1haW50YWluIGEgZ2xvYmFsXG4gKiBsb2dnZXIgaW5zdGFuY2UgYW5kIGFsbG93cyBjcmVhdGluZyBzcGVjaWZpYyBsb2dnZXJzIGZvciBkaWZmZXJlbnQgY2xhc3NlcyBhbmQgbWV0aG9kcy5cbiAqXG4gKiBAY2xhc3NcbiAqL1xuZXhwb3J0IGNsYXNzIExvZ2dpbmcge1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBGYWN0b3J5IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBsb2dnZXIgaW5zdGFuY2VzLlxuICAgICAqIEBzdW1tYXJ5IEEgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIG5ldyBWZXJib3NpdHlMb2dnZXIgaW5zdGFuY2VzLiBCeSBkZWZhdWx0LCBpdCBjcmVhdGVzIGEgTWluaUxvZ2dlci5cbiAgICAgKi9cbiAgICBzdGF0aWMgeyB0aGlzLl9mYWN0b3J5ID0gKG9iamVjdCwgY29uZmlnLCBpZCkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IE1pbmlMb2dnZXIob2JqZWN0LCBjb25maWcsIGlkKTtcbiAgICB9OyB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBsb2dnaW5nIHN5c3RlbS5cbiAgICAgKiBAc3VtbWFyeSBTdG9yZXMgdGhlIGdsb2JhbCB2ZXJib3NpdHkgbGV2ZWwgYW5kIGxvZyBsZXZlbCBzZXR0aW5ncy5cbiAgICAgKi9cbiAgICBzdGF0aWMgeyB0aGlzLl9jb25maWcgPSBEZWZhdWx0TG9nZ2luZ0NvbmZpZzsgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBQcml2YXRlIGNvbnN0cnVjdG9yIHRvIHByZXZlbnQgaW5zdGFudGlhdGlvbi5cbiAgICAgKiBAc3VtbWFyeSBFbnN1cmVzIHRoYXQgdGhlIExvZ2dpbmcgY2xhc3MgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBhcyBpdCdzIGRlc2lnbmVkIHRvIGJlIHVzZWQgc3RhdGljYWxseS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxuICAgIHNldEZhY3RvcnkoZmFjdG9yeSkge1xuICAgICAgICBMb2dnaW5nLl9mYWN0b3J5ID0gZmFjdG9yeTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFNldHRlciBmb3IgdGhlIGxvZ2dpbmcgY29uZmlndXJhdGlvbi5cbiAgICAgKiBAc3VtbWFyeSBBbGxvd3MgdXBkYXRpbmcgdGhlIGdsb2JhbCBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29uZmlnIC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdmVyYm9zaXR5IGFuZCBsb2cgbGV2ZWwgc2V0dGluZ3MuXG4gICAgICovXG4gICAgc3RhdGljIHNldENvbmZpZyhjb25maWcpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLl9jb25maWcsIGNvbmZpZyk7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRDb25maWcoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9jb25maWcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIG9yIGNyZWF0ZXMgdGhlIGdsb2JhbCBsb2dnZXIgaW5zdGFuY2UuXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyB0aGUgZXhpc3RpbmcgZ2xvYmFsIGxvZ2dlciBvciBjcmVhdGVzIGEgbmV3IG9uZSBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICAgICAqXG4gICAgICogQHJldHVybiBUaGUgZ2xvYmFsIFZlcmJvc2l0eUxvZ2dlciBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0KCkge1xuICAgICAgICB0aGlzLmdsb2JhbCA9IHRoaXMuZ2xvYmFsID8gdGhpcy5nbG9iYWwgOiB0aGlzLl9mYWN0b3J5KFwiTG9nZ2luZ1wiKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2xvYmFsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhIHZlcmJvc2UgbWVzc2FnZS5cbiAgICAgKiBAc3VtbWFyeSBEZWxlZ2F0ZXMgdGhlIHZlcmJvc2UgbG9nZ2luZyB0byB0aGUgZ2xvYmFsIGxvZ2dlciBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQuXG4gICAgICogQHBhcmFtIHZlcmJvc2l0eSAtIFRoZSB2ZXJib3NpdHkgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UgKGRlZmF1bHQ6IDApLlxuICAgICAqL1xuICAgIHN0YXRpYyB2ZXJib3NlKG1zZywgdmVyYm9zaXR5ID0gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoKS52ZXJib3NlKG1zZywgdmVyYm9zaXR5KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYW4gaW5mbyBtZXNzYWdlLlxuICAgICAqIEBzdW1tYXJ5IERlbGVnYXRlcyB0aGUgaW5mbyBsb2dnaW5nIHRvIHRoZSBnbG9iYWwgbG9nZ2VyIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZC5cbiAgICAgKi9cbiAgICBzdGF0aWMgaW5mbyhtc2cpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCkuaW5mbyhtc2cpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhIGRlYnVnIG1lc3NhZ2UuXG4gICAgICogQHN1bW1hcnkgRGVsZWdhdGVzIHRoZSBkZWJ1ZyBsb2dnaW5nIHRvIHRoZSBnbG9iYWwgbG9nZ2VyIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZC5cbiAgICAgKi9cbiAgICBzdGF0aWMgZGVidWcobXNnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgpLmRlYnVnKG1zZyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBMb2dzIGEgc2lsbHkgbWVzc2FnZS5cbiAgICAgKiBAc3VtbWFyeSBEZWxlZ2F0ZXMgdGhlIGRlYnVnIGxvZ2dpbmcgdG8gdGhlIGdsb2JhbCBsb2dnZXIgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbXNnIC0gVGhlIG1lc3NhZ2UgdG8gYmUgbG9nZ2VkLlxuICAgICAqL1xuICAgIHN0YXRpYyBzaWxseShtc2cpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCkuc2lsbHkobXNnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYW4gZXJyb3IgbWVzc2FnZS5cbiAgICAgKiBAc3VtbWFyeSBEZWxlZ2F0ZXMgdGhlIGVycm9yIGxvZ2dpbmcgdG8gdGhlIGdsb2JhbCBsb2dnZXIgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbXNnIC0gVGhlIG1lc3NhZ2UgdG8gYmUgbG9nZ2VkLlxuICAgICAqL1xuICAgIHN0YXRpYyBlcnJvcihtc2cpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCkuZXJyb3IobXNnKTtcbiAgICB9XG4gICAgc3RhdGljIGZvcihvYmplY3QsIGlkLCBjb25maWcpIHtcbiAgICAgICAgb2JqZWN0ID0gdHlwZW9mIG9iamVjdCA9PT0gXCJzdHJpbmdcIiA/IG9iamVjdCA6IG9iamVjdC5uYW1lO1xuICAgICAgICBpZCA9IHR5cGVvZiBpZCA9PT0gXCJzdHJpbmdcIiA/IGlkIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25maWcgPSB0eXBlb2YgaWQgPT09IFwib2JqZWN0XCIgPyBpZCA6IGNvbmZpZztcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZhY3Rvcnkob2JqZWN0LCBjb25maWcsIGlkKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBsb2dnZXIgZm9yIGEgc3BlY2lmaWMgcmVhc29uIG9yIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAc3VtbWFyeSBUaGlzIHN0YXRpYyBtZXRob2QgY3JlYXRlcyBhIG5ldyBsb2dnZXIgaW5zdGFuY2UgdXNpbmcgdGhlIGZhY3RvcnkgZnVuY3Rpb24sXG4gICAgICogYmFzZWQgb24gYSBnaXZlbiByZWFzb24gb3IgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZWFzb24gLSBBIHN0cmluZyBkZXNjcmliaW5nIHRoZSByZWFzb24gb3IgY29udGV4dCBmb3IgY3JlYXRpbmcgdGhpcyBsb2dnZXIuXG4gICAgICogQHBhcmFtIGlkXG4gICAgICogQHJldHVybnMgQSBuZXcgVmVyYm9zaXR5TG9nZ2VyIG9yIENsYXNzTG9nZ2VyIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHN0YXRpYyBiZWNhdXNlKHJlYXNvbiwgaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZhY3RvcnkocmVhc29uLCB0aGlzLl9jb25maWcsIGlkKTtcbiAgICB9XG4gICAgc3RhdGljIHRoZW1lKHRleHQsIHR5cGUsIGxvZ2dlckxldmVsLCB0ZW1wbGF0ZSA9IERlZmF1bHRUaGVtZSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NvbmZpZy5zdHlsZSlcbiAgICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICBjb25zdCBsb2dnZXIgPSBMb2dnaW5nLmdldCgpLmZvcih0aGlzLnRoZW1lKTtcbiAgICAgICAgZnVuY3Rpb24gYXBwbHkodHh0LCBvcHRpb24sIHZhbHVlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHQgPSB0eHQ7XG4gICAgICAgICAgICAgICAgbGV0IGMgPSBzdHlsZSh0KTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhcHBseUNvbG9yKHZhbCwgaXNCZyA9IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBmID0gaXNCZyA/IGMuYmFja2dyb3VuZCA6IGMuZm9yZWdyb3VuZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmLmNhbGwoYywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBpc0JnID8gYy5iZ0NvbG9yMjU2IDogYy5jb2xvcjI1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZih2YWxbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBpc0JnID8gYy5iZ1JnYiA6IGMucmdiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjLnJnYih2YWxbMF0sIHZhbFsxXSwgdmFsWzJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBOb3QgYSB2YWxpZCBjb2xvciBvcHRpb246ICR7b3B0aW9ufWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHlsZSh0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhcHBseVN0eWxlKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjID0gYy5zdHlsZSh2KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBjW3ZdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJiZ1wiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZmdcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcHBseUNvbG9yKHZhbHVlKS50ZXh0O1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmZvckVhY2goYXBwbHlTdHlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBseVN0eWxlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjLnRleHQ7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYE5vdCBhIHZhbGlkIHRoZW1lIG9wdGlvbjogJHtvcHRpb259YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYEVycm9yIGFwcGx5aW5nIHN0eWxlOiAke29wdGlvbn0gd2l0aCB2YWx1ZSAke3ZhbHVlfWApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0eHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kaXZpZHVhbFRoZW1lID0gdGVtcGxhdGVbdHlwZV07XG4gICAgICAgIGlmICghaW5kaXZpZHVhbFRoZW1lIHx8ICFPYmplY3Qua2V5cyhpbmRpdmlkdWFsVGhlbWUpLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFjdHVhbFRoZW1lID0gaW5kaXZpZHVhbFRoZW1lO1xuICAgICAgICBjb25zdCBsb2dMZXZlbHMgPSBPYmplY3QuYXNzaWduKHt9LCBMb2dMZXZlbCk7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhpbmRpdmlkdWFsVGhlbWUpWzBdIGluIGxvZ0xldmVscylcbiAgICAgICAgICAgIGFjdHVhbFRoZW1lID1cbiAgICAgICAgICAgICAgICBpbmRpdmlkdWFsVGhlbWVbbG9nZ2VyTGV2ZWxdIHx8IHt9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoYWN0dWFsVGhlbWUpLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IGFjdHVhbFRoZW1lW2tleV07XG4gICAgICAgICAgICBpZiAodmFsKVxuICAgICAgICAgICAgICAgIHJldHVybiBhcHBseShhY2MsIGtleSwgdmFsKTtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHRleHQpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJHOW5aMmx1Wnk1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTlzYjJkbmFXNW5MblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVZWQkxFOUJRVThzUlVGQmJVSXNTMEZCU3l4RlFVRm5RaXhOUVVGTkxIVkNRVUYxUWl4RFFVRkRPMEZCUXpkRkxFOUJRVThzUlVGRFRDeHZRa0ZCYjBJc1JVRkRjRUlzV1VGQldTeEZRVU5hTEZGQlFWRXNSVUZEVWl4blFrRkJaMElzUjBGRGFrSXNUVUZCVFN4aFFVRmhMRU5CUVVNN1FVRkZja0k3T3pzN096dEhRVTFITzBGQlEwZ3NUVUZCVFN4UFFVRlBMRlZCUVZVN1NVRkRja0k3T3pzN096czdUMEZQUnp0SlFVTklMRmxCUTFrc1QwRkJaU3hGUVVObUxFbEJRVFpDTEVWQlF6ZENMRVZCUVZjN1VVRkdXQ3haUVVGUExFZEJRVkFzVDBGQlR5eERRVUZSTzFGQlEyWXNVMEZCU1N4SFFVRktMRWxCUVVrc1EwRkJlVUk3VVVGRE4wSXNUMEZCUlN4SFFVRkdMRVZCUVVVc1EwRkJVenRKUVVOd1FpeERRVUZETzBsQlJVMHNUVUZCVFN4RFFVTmtMRWRCUVhkQ08xRkJSWGhDTEVsQlFVa3NTVUZCU1N4RFFVRkRMRWxCUVVrc1NVRkJTU3hIUVVGSExFbEJRVWtzU1VGQlNTeERRVUZETEVsQlFVazdXVUZCUlN4UFFVRlBMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEZWtRc1QwRkJUeXhQUVVGUExFTkJRVU1zVTBGQlV5eEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRiRU1zUTBGQlF6dEpRVVZFTEVkQlFVY3NRMEZEUkN4TlFVRXlReXhGUVVNelF5eE5RVUVyUWp0UlFVVXZRaXhOUVVGTkxFZEJRVWNzVFVGQlRUdFpRVU5pTEVOQlFVTXNRMEZCUXl4UFFVRlBMRTFCUVUwc1MwRkJTeXhSUVVGUk8yZENRVU14UWl4RFFVRkRMRU5CUVVNc1RVRkJUVHRuUWtGRFVpeERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrN1dVRkRaaXhEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETzFGQlJXUXNUMEZCVHl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRVZCUVVVc1JVRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlF6dEpRVU40UlN4RFFVRkRPMGxCUlVRN096czdPenM3TzA5QlVVYzdTVUZEVHl4VFFVRlRMRU5CUTJwQ0xFdEJRV1VzUlVGRFppeFBRVUV5UWl4RlFVTXpRaXhMUVVGak8xRkJSV1FzVFVGQlRTeEhRVUZITEVkQlFXRXNSVUZCUlN4RFFVRkRPMUZCUTNwQ0xFMUJRVTBzUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03VVVGRGJrTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGZEJRVmNzUTBGQlF5eEZRVUZGTEVOQlFVTTdXVUZETjBJc1RVRkJUU3hKUVVGSkxFZEJRVWNzU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJRenRaUVVOMFF5eE5RVUZOTEZOQlFWTXNSMEZCUnl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RlFVRkZMRmRCUVZjc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRPMWxCUTNwRkxFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNN1VVRkRkRUlzUTBGQlF6dFJRVVZFTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhWUVVGVkxFTkJRVU1zUlVGQlJTeERRVUZETzFsQlF6VkNMRTFCUVUwc1IwRkJSeXhIUVVGWExFdEJRVXM3WjBKQlEzWkNMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSVUZCUlN4VlFVRlZMRVZCUVVVc1MwRkJTeXhEUVVGRE8yZENRVU42UXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRE8xbEJRMVlzUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOb1FpeERRVUZETzFGQlJVUXNTVUZCU1N4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGTkJRVk1zUTBGQlF5eEZRVUZGTEVOQlFVTTdXVUZETTBJc1RVRkJUU3hQUVVGUExFZEJRVmNzUzBGQlN6dG5Ra0ZETTBJc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSU3hQUVVGUExFVkJRVVVzUzBGQlN5eERRVUZETzJkQ1FVTTNReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXp0WlFVTnFRaXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMUZCUTNCQ0xFTkJRVU03VVVGRlJDeEpRVUZKTEVsQlFVa3NRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJRenRaUVVOYUxFTkJRVU03WjBKQlEwTXNUVUZCVFN4RlFVRkZMRWRCUVZjc1MwRkJTenR2UWtGRGRFSXNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNSVUZCUlN4SlFVRkpMRVZCUVVVc1MwRkJTeXhEUVVGRE8yOUNRVU55UXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF6dG5Ra0ZEV2l4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFsQlEyWXNRMEZCUXp0UlFVTklMRU5CUVVNN1VVRkZSQ3hOUVVGTkxFZEJRVWNzUjBGQlZ5eExRVUZMTzFsQlEzWkNMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVU5ZTEU5QlFVOHNUMEZCVHl4TFFVRkxMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUlN4UFFVRnBRaXhEUVVGRExFOUJRVThzUlVGRGJFVXNVMEZCVXl4RlFVTlVMRXRCUVVzc1EwRkRUanRaUVVOSUxFTkJRVU1zUTBGQlF5eFBRVUZQTEU5QlFVOHNTMEZCU3l4UlFVRlJPMmRDUVVNelFpeERRVUZETEVOQlFVTXNUMEZCVHp0blFrRkRWQ3hEUVVGRExFTkJRVVVzVDBGQmFVSXNRMEZCUXl4UFFVRlBMRU5CUVVNN1VVRkRha01zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOa0xFbEJRVWtzUzBGQlN5eEpRVUZKTEU5QlFVOHNXVUZCV1N4TFFVRkxMRVZCUVVVc1EwRkJRenRaUVVOMFF5eExRVUZMTEVkQlFVY3NTMEZCU3p0blFrRkRXQ3hEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZEV0N4RFFVRkRMRXRCUVVzc1NVRkJTeXhQUVVGcFFpeERRVUZETEV0QlFVc3NRMEZCVnl4RlFVTTNReXhQUVVGUExFVkJRMUFzUzBGQlN5eERRVU5PTzJkQ1FVTklMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU03V1VGRFZpeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRzFDUVVGdFFpeExRVUZMTEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTNaRExFTkJRVU03VVVGRlJDeFBRVUZQTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVOQlFWY3NRMEZCUXl4RFFVRkRPMGxCUTNSRUxFTkJRVU03U1VGRlJEczdPenM3T3pzN1QwRlJSenRKUVVOUExFZEJRVWNzUTBGRFdDeExRVUZsTEVWQlEyWXNSMEZCZFVJc1JVRkRka0lzUzBGQll6dFJRVVZrTEVsQlEwVXNaMEpCUVdkQ0xFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVdFc1EwRkJRenRaUVVOc1JDeG5Ra0ZCWjBJc1EwRkJReXhMUVVGTExFTkJRVU03V1VGRmRrSXNUMEZCVHp0UlFVTlVMRWxCUVVrc1RVRkJUU3hEUVVGRE8xRkJRMWdzVVVGQlVTeExRVUZMTEVWQlFVVXNRMEZCUXp0WlFVTmtMRXRCUVVzc1VVRkJVU3hEUVVGRExFbEJRVWs3WjBKQlEyaENMRTFCUVUwc1IwRkJSeXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETzJkQ1FVTnlRaXhOUVVGTk8xbEJRMUlzUzBGQlN5eFJRVUZSTEVOQlFVTXNUMEZCVHl4RFFVRkRPMWxCUTNSQ0xFdEJRVXNzVVVGQlVTeERRVUZETEV0QlFVczdaMEpCUTJwQ0xFMUJRVTBzUjBGQlJ5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRPMmRDUVVOMlFpeE5RVUZOTzFsQlExSXNTMEZCU3l4UlFVRlJMRU5CUVVNc1MwRkJTenRuUWtGRGFrSXNUVUZCVFN4SFFVRkhMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU03WjBKQlEzWkNMRTFCUVUwN1dVRkRVanRuUWtGRFJTeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRzFDUVVGdFFpeERRVUZETEVOQlFVTTdVVUZEZWtNc1EwRkJRenRSUVVORUxFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hIUVVGSExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTTFReXhEUVVGRE8wbEJSVVE3T3pzN096dFBRVTFITzBsQlEwZ3NTMEZCU3l4RFFVRkRMRWRCUVdVc1JVRkJSU3haUVVGdlFpeERRVUZETzFGQlF6RkRMRWxCUVVzc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFRRVUZUTEVOQlFWa3NTVUZCU1N4VFFVRlRPMWxCUTJwRUxFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNVVUZCVVN4RFFVRkRMRTlCUVU4c1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU53UXl4RFFVRkRPMGxCUlVRN096czdPenRQUVUxSE8wbEJRMGdzVDBGQlR5eERRVUZETEVkQlFXVXNSVUZCUlN4WlFVRnZRaXhEUVVGRE8xRkJRelZETEVsQlFVc3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhUUVVGVExFTkJRVmtzU1VGQlNTeFRRVUZUTzFsQlEycEVMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVVVGQlVTeERRVUZETEU5QlFVOHNSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVOd1F5eERRVUZETzBsQlJVUTdPenM3TzA5QlMwYzdTVUZEU0N4SlFVRkpMRU5CUVVNc1IwRkJaVHRSUVVOc1FpeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZETDBJc1EwRkJRenRKUVVWRU96czdPenRQUVV0SE8wbEJRMGdzUzBGQlN5eERRVUZETEVkQlFXVTdVVUZEYmtJc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRMmhETEVOQlFVTTdTVUZGUkRzN096czdUMEZMUnp0SlFVTklMRXRCUVVzc1EwRkJReXhIUVVGMVFqdFJRVU16UWl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRhRU1zUTBGQlF6dEpRVVZFTEZOQlFWTXNRMEZCUXl4TlFVRTRRanRSUVVOMFF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVsQlFVa3NSVUZCUlN4RFFVRkRMRVZCUVVVc1IwRkJSeXhOUVVGTkxFVkJRVVVzUTBGQlF6dEpRVU5zUkN4RFFVRkRPME5CUTBZN1FVRkZSRHM3T3pzN096dEhRVTlITzBGQlEwZ3NUVUZCVFN4UFFVRlBMRTlCUVU4N1NVRlBiRUk3T3p0UFFVZEhPMkZCUTFrc1lVRkJVU3hIUVVGclFpeERRVU4yUXl4TlFVRmpMRVZCUTJRc1RVRkJLMElzUlVGREwwSXNSVUZCVnl4RlFVTllMRVZCUVVVN1VVRkRSaXhQUVVGUExFbEJRVWtzVlVGQlZTeERRVUZETEUxQlFVMHNSVUZCUlN4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU03U1VGRE5VTXNRMEZCUXl4RFFVRkRPMGxCUTBZN096dFBRVWRITzJGQlExa3NXVUZCVHl4SFFVRnJRaXh2UWtGQmIwSXNRMEZCUXp0SlFVVTNSRHM3TzA5QlIwYzdTVUZEU0N4blFrRkJkVUlzUTBGQlF6dEpRVVY0UWl4VlFVRlZMRU5CUVVNc1QwRkJjMEk3VVVGREwwSXNUMEZCVHl4RFFVRkRMRkZCUVZFc1IwRkJSeXhQUVVGUExFTkJRVU03U1VGRE4wSXNRMEZCUXp0SlFVVkVPenM3T3p0UFFVdEhPMGxCUTBnc1RVRkJUU3hEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUU0UWp0UlFVTTNReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU03U1VGRGRFTXNRMEZCUXp0SlFVVkVMRTFCUVUwc1EwRkJReXhUUVVGVE8xRkJRMlFzVDBGQlR5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1JVRkJSU3hKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdTVUZEZWtNc1EwRkJRenRKUVVWRU96czdPenRQUVV0SE8wbEJRMGdzVFVGQlRTeERRVUZETEVkQlFVYzdVVUZEVWl4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03VVVGRGJrVXNUMEZCVHl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRE8wbEJRM0pDTEVOQlFVTTdTVUZGUkRzN096czdPMDlCVFVjN1NVRkRTQ3hOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEVkQlFXVXNSVUZCUlN4WlFVRnZRaXhEUVVGRE8xRkJRMjVFTEU5QlFVOHNTVUZCU1N4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEVWQlFVVXNVMEZCVXl4RFFVRkRMRU5CUVVNN1NVRkROVU1zUTBGQlF6dEpRVVZFT3pzN096dFBRVXRITzBsQlEwZ3NUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGbE8xRkJRM3BDTEU5QlFVOHNTVUZCU1N4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVTTVRaXhEUVVGRE8wbEJSVVE3T3pzN08wOUJTMGM3U1VGRFNDeE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVdVN1VVRkRNVUlzVDBGQlR5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBsQlF5OUNMRU5CUVVNN1NVRkZSRHM3T3pzN1QwRkxSenRKUVVOSUxFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCWlR0UlFVTXhRaXhQUVVGUExFbEJRVWtzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGREwwSXNRMEZCUXp0SlFVVkVPenM3T3p0UFFVdEhPMGxCUTBnc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZsTzFGQlF6RkNMRTlCUVU4c1NVRkJTU3hEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVNdlFpeERRVUZETzBsQlJVUXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkRVaXhOUVVGelFpeEZRVU4wUWl4RlFVRnZReXhGUVVOd1F5eE5RVUVyUWp0UlFVVXZRaXhOUVVGTkxFZEJRVWNzVDBGQlR5eE5RVUZOTEV0QlFVc3NVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNN1VVRkRNMFFzUlVGQlJTeEhRVUZITEU5QlFVOHNSVUZCUlN4TFFVRkxMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4VFFVRlRMRU5CUVVNN1VVRkROME1zVFVGQlRTeEhRVUZITEU5QlFVOHNSVUZCUlN4TFFVRkxMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVVVzUlVGQk5rSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRE8xRkJRekZGTEU5QlFVOHNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhOUVVGTkxFVkJRVVVzVFVGQlRTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRPMGxCUXpORExFTkJRVU03U1VGRlJEczdPenM3T3pzN08wOUJVMGM3U1VGRFNDeE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTFCUVdNc1JVRkJSU3hGUVVGWE8xRkJRM2hETEU5QlFVOHNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhOUVVGTkxFVkJRVVVzU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJRenRKUVVOcVJDeERRVUZETzBsQlJVUXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkRWaXhKUVVGWkxFVkJRMW9zU1VGQmEwTXNSVUZEYkVNc1YwRkJjVUlzUlVGRGNrSXNWMEZCYTBJc1dVRkJXVHRSUVVVNVFpeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTE8xbEJRVVVzVDBGQlR5eEpRVUZKTEVOQlFVTTdVVUZEY2tNc1RVRkJUU3hOUVVGTkxFZEJRVWNzVDBGQlR5eERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdVVUZGTjBNc1UwRkJVeXhMUVVGTExFTkJRMW9zUjBGQlZ5eEZRVU5ZTEUxQlFYbENMRVZCUTNwQ0xFdEJRWGxGTzFsQlJYcEZMRWxCUVVrc1EwRkJRenRuUWtGRFNDeE5RVUZOTEVOQlFVTXNSMEZCTUVJc1IwRkJSeXhEUVVGRE8yZENRVU55UXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUldwQ0xGTkJRVk1zVlVGQlZTeERRVU5xUWl4SFFVRnBSQ3hGUVVOcVJDeEpRVUZKTEVkQlFVY3NTMEZCU3p0dlFrRkZXaXhKUVVGSkxFTkJRVU1zUjBGSmJVSXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1ZVRkJWU3hEUVVGRE8yOUNRVU16UkN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRPM2RDUVVONFFpeFBRVUZSTEVOQlFTdERMRU5CUVVNc1NVRkJTU3hEUVVNeFJDeERRVUZETEVWQlEwUXNTMEZCWlN4RFFVTm9RaXhEUVVGRE8yOUNRVU5LTEVOQlFVTTdiMEpCUTBRc1VVRkJVU3hIUVVGSExFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdkMEpCUTI1Q0xFdEJRVXNzUTBGQlF6czBRa0ZEU2l4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVVVGQlVTeERRVUZET3pSQ1FVTnlReXhQUVVGUkxFTkJRVFpETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03ZDBKQlEyaEZMRXRCUVVzc1EwRkJRenMwUWtGRFNpeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRE96UkNRVU16UWl4UFFVRlBMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenQzUWtGRGRrTTdORUpCUTBVc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5dzJRa0ZCTmtJc1RVRkJUU3hGUVVGRkxFTkJRVU1zUTBGQlF6czBRa0ZEY0VRc1QwRkJUeXhMUVVGTExFTkJRVU1zUTBGQlZ5eERRVUZETEVOQlFVTTdiMEpCUXpsQ0xFTkJRVU03WjBKQlEwZ3NRMEZCUXp0blFrRkZSQ3hUUVVGVExGVkJRVlVzUTBGQlF5eERRVUZyUWp0dlFrRkRjRU1zU1VGQlNTeFBRVUZQTEVOQlFVTXNTMEZCU3l4UlFVRlJMRVZCUVVVc1EwRkJRenQzUWtGRE1VSXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdiMEpCUTJwQ0xFTkJRVU03ZVVKQlFVMHNRMEZCUXp0M1FrRkRUaXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFUQkNMRU5CUVdsQ0xFTkJRVU03YjBKQlEzQkVMRU5CUVVNN1owSkJRMGdzUTBGQlF6dG5Ra0ZGUkN4UlFVRlJMRTFCUVUwc1JVRkJSU3hEUVVGRE8yOUNRVU5tTEV0QlFVc3NTVUZCU1N4RFFVRkRPMjlDUVVOV0xFdEJRVXNzU1VGQlNUdDNRa0ZEVUN4UFFVRlBMRlZCUVZVc1EwRkJReXhMUVVGbExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTTdiMEpCUXpGRExFdEJRVXNzVDBGQlR6dDNRa0ZEVml4SlFVRkpMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVXNRMEZCUXpzMFFrRkRla0lzUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJRenQzUWtGRE5VSXNRMEZCUXpzMlFrRkJUU3hEUVVGRE96UkNRVU5PTEZWQlFWVXNRMEZCUXl4TFFVRjNRaXhEUVVGRExFTkJRVU03ZDBKQlEzWkRMRU5CUVVNN2QwSkJRMFFzVDBGQlR5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRPMjlDUVVOb1FqdDNRa0ZEUlN4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExEWkNRVUUyUWl4TlFVRk5MRVZCUVVVc1EwRkJReXhEUVVGRE8zZENRVU53UkN4UFFVRlBMRU5CUVVNc1EwRkJRenRuUWtGRFlpeERRVUZETzJkQ1FVTkVMRFpFUVVFMlJEdFpRVU12UkN4RFFVRkRPMWxCUVVNc1QwRkJUeXhEUVVGVkxFVkJRVVVzUTBGQlF6dG5Ra0ZEY0VJc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eDVRa0ZCZVVJc1RVRkJUU3hsUVVGbExFdEJRVXNzUlVGQlJTeERRVUZETEVOQlFVTTdaMEpCUTNCRkxFOUJRVThzUjBGQlJ5eERRVUZETzFsQlEySXNRMEZCUXp0UlFVTklMRU5CUVVNN1VVRkZSQ3hOUVVGTkxHVkJRV1VzUjBGQlJ5eFJRVUZSTEVOQlFVTXNTVUZCYlVJc1EwRkJReXhEUVVGRE8xRkJRM1JFTEVsQlFVa3NRMEZCUXl4bFFVRmxMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8xbEJRemRFTEU5QlFVOHNTVUZCU1N4RFFVRkRPMUZCUTJRc1EwRkJRenRSUVVWRUxFbEJRVWtzVjBGQlZ5eEhRVUZuUWl4bFFVRTRRaXhEUVVGRE8xRkJSVGxFTEUxQlFVMHNVMEZCVXl4SFFVRkhMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJTeEZRVUZGTEZGQlFWRXNRMEZCUXl4RFFVRkRPMUZCUXpsRExFbEJRVWtzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4bFFVRmxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeFRRVUZUTzFsQlF6bERMRmRCUVZjN1owSkJRMUlzWlVGQmVVTXNRMEZCUXl4WFFVRlhMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03VVVGRmJFVXNUMEZCVHl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWRCUVZjc1JVRkJSU3hIUVVGWExFVkJRVVVzUlVGQlJUdFpRVU5zUlN4TlFVRk5MRWRCUVVjc1IwRkJTU3hYUVVFeVFpeERRVUZETEVkQlFYZENMRU5CUVVNc1EwRkJRenRaUVVOdVJTeEpRVUZKTEVkQlFVYzdaMEpCUTB3c1QwRkJUeXhMUVVGTExFTkJRMVlzUjBGQlJ5eEZRVU5JTEVkQlFYZENMRVZCUTNoQ0xFZEJTMWtzUTBGRFlpeERRVUZETzFsQlEwb3NUMEZCVHl4SFFVRkhMRU5CUVVNN1VVRkRZaXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdTVUZEV0N4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSHRjYmlBZ1RHOW5aMlZ5Um1GamRHOXllU3hjYmlBZ1RHOW5aMmx1WjBOdmJtWnBaeXhjYmlBZ1RHOW5aMmx1WjBOdmJuUmxlSFFzWEc0Z0lGTjBjbWx1WjB4cGEyVXNYRzRnSUZSb1pXMWxMRnh1SUNCVWFHVnRaVTl3ZEdsdmJpeGNiaUFnVkdobGJXVlBjSFJwYjI1Q2VVeHZaMHhsZG1Wc0xGeHVJQ0JNYjJkblpYSXNYRzU5SUdaeWIyMGdYQ0l1TDNSNWNHVnpYQ0k3WEc1cGJYQnZjblFnZXlCRGIyeHZjbWw2WlU5d2RHbHZibk1zSUhOMGVXeGxMQ0JUZEhsc1pXUlRkSEpwYm1jZ2ZTQm1jbTl0SUZ3aWMzUjViR1ZrTFhOMGNtbHVaeTFpZFdsc1pHVnlYQ0k3WEc1cGJYQnZjblFnZTF4dUlDQkVaV1poZFd4MFRHOW5aMmx1WjBOdmJtWnBaeXhjYmlBZ1JHVm1ZWFZzZEZSb1pXMWxMRnh1SUNCTWIyZE1aWFpsYkN4Y2JpQWdUblZ0WlhKcFkweHZaMHhsZG1Wc2N5eGNibjBnWm5KdmJTQmNJaTR2WTI5dWMzUmhiblJ6WENJN1hHNWNiaThxS2x4dUlDb2dRR1JsYzJOeWFYQjBhVzl1SUVFZ2JXbHVhVzFoYkNCc2IyZG5aWElnYVcxd2JHVnRaVzUwWVhScGIyNHVYRzRnS2lCQWMzVnRiV0Z5ZVNCTmFXNXBURzluWjJWeUlHbHpJR0VnYkdsbmFIUjNaV2xuYUhRZ2JHOW5aMmx1WnlCamJHRnpjeUIwYUdGMElHbHRjR3hsYldWdWRITWdkR2hsSUZabGNtSnZjMmwwZVV4dloyZGxjaUJwYm5SbGNtWmhZMlV1WEc0Z0tpQkpkQ0J3Y205MmFXUmxjeUJpWVhOcFl5QnNiMmRuYVc1bklHWjFibU4wYVc5dVlXeHBkSGtnZDJsMGFDQnpkWEJ3YjNKMElHWnZjaUJrYVdabVpYSmxiblFnYkc5bklHeGxkbVZzY3lCaGJtUWdkbVZ5WW05emFYUjVMbHh1SUNwY2JpQXFJRUJqYkdGemMxeHVJQ292WEc1bGVIQnZjblFnWTJ4aGMzTWdUV2x1YVV4dloyZGxjaUJwYlhCc1pXMWxiblJ6SUV4dloyZGxjaUI3WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnUTNKbFlYUmxjeUJoSUc1bGR5Qk5hVzVwVEc5bloyVnlJR2x1YzNSaGJtTmxMbHh1SUNBZ0tpQkFjM1Z0YldGeWVTQkpibWwwYVdGc2FYcGxjeUJoSUUxcGJtbE1iMmRuWlhJZ2QybDBhQ0IwYUdVZ1oybDJaVzRnWTJ4aGMzTWdibUZ0WlN3Z2IzQjBhVzl1WVd3Z1kyOXVabWxuZFhKaGRHbHZiaXdnWVc1a0lHMWxkR2h2WkNCdVlXMWxMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnWTI5dWRHVjRkQ0F0SUZSb1pTQnVZVzFsSUc5bUlIUm9aU0JqYkdGemN5QjFjMmx1WnlCMGFHbHpJR3h2WjJkbGNpNWNiaUFnSUNvZ1FIQmhjbUZ0SUZ0amIyNW1YU0F0SUU5d2RHbHZibUZzSUd4dloyZHBibWNnWTI5dVptbG5kWEpoZEdsdmJpNGdSR1ZtWVhWc2RITWdkRzhnU1c1bWJ5QnNaWFpsYkNCaGJtUWdkbVZ5WW05emFYUjVJREF1WEc0Z0lDQXFJRUJ3WVhKaGJTQmJhV1JkSUMwZ1QzQjBhVzl1WVd3Z2RXNXBjWFZsSUdsa1pXNTBhV1pwWlhJZ1ptOXlJSFJvWlNCc2IyZG5aWElnYVc1emRHRnVZMlV1WEc0Z0lDQXFMMXh1SUNCamIyNXpkSEoxWTNSdmNpaGNiaUFnSUNCd2NtOTBaV04wWldRZ1kyOXVkR1Y0ZERvZ2MzUnlhVzVuTEZ4dUlDQWdJSEJ5YjNSbFkzUmxaQ0JqYjI1bVB6b2dVR0Z5ZEdsaGJEeE1iMmRuYVc1blEyOXVabWxuUGl4Y2JpQWdJQ0J3Y205MFpXTjBaV1FnYVdRL09pQnpkSEpwYm1kY2JpQWdLU0I3ZlZ4dVhHNGdJSEJ5YjNSbFkzUmxaQ0JqYjI1bWFXY29YRzRnSUNBZ2EyVjVPaUJyWlhsdlppQk1iMmRuYVc1blEyOXVabWxuWEc0Z0lDazZJRXh2WjJkcGJtZERiMjVtYVdkYmEyVjViMllnVEc5bloybHVaME52Ym1acFoxMGdlMXh1SUNBZ0lHbG1JQ2gwYUdsekxtTnZibVlnSmlZZ2EyVjVJR2x1SUhSb2FYTXVZMjl1WmlrZ2NtVjBkWEp1SUhSb2FYTXVZMjl1Wmx0clpYbGRPMXh1SUNBZ0lISmxkSFZ5YmlCTWIyZG5hVzVuTG1kbGRFTnZibVpwWnlncFcydGxlVjA3WEc0Z0lIMWNibHh1SUNCbWIzSW9YRzRnSUNBZ2JXVjBhRzlrUHpvZ2MzUnlhVzVuSUh3Z0tDZ3VMaTVoY21kek9pQmhibmxiWFNrZ1BUNGdZVzU1S1N4Y2JpQWdJQ0JqYjI1bWFXYy9PaUJRWVhKMGFXRnNQRXh2WjJkcGJtZERiMjVtYVdjK1hHNGdJQ2s2SUV4dloyZGxjaUI3WEc0Z0lDQWdiV1YwYUc5a0lEMGdiV1YwYUc5a1hHNGdJQ0FnSUNBL0lIUjVjR1Z2WmlCdFpYUm9iMlFnUFQwOUlGd2ljM1J5YVc1blhDSmNiaUFnSUNBZ0lDQWdQeUJ0WlhSb2IyUmNiaUFnSUNBZ0lDQWdPaUJ0WlhSb2IyUXVibUZ0WlZ4dUlDQWdJQ0FnT2lCMWJtUmxabWx1WldRN1hHNWNiaUFnSUNCeVpYUjFjbTRnVEc5bloybHVaeTVtYjNJb1czUm9hWE11WTI5dWRHVjRkQ3dnYldWMGFHOWtYUzVxYjJsdUtGd2lMbHdpS1N3Z2RHaHBjeTVwWkN3Z1kyOXVabWxuS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnUTNKbFlYUmxjeUJoSUdadmNtMWhkSFJsWkNCc2IyY2djM1J5YVc1bkxseHVJQ0FnS2lCQWMzVnRiV0Z5ZVNCSFpXNWxjbUYwWlhNZ1lTQnNiMmNnYzNSeWFXNW5JSGRwZEdnZ2RHbHRaWE4wWVcxd0xDQmpiMnh2Y21Wa0lHeHZaeUJzWlhabGJDd2dZVzVrSUcxbGMzTmhaMlV1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCc1pYWmxiQ0F0SUZSb1pTQnNiMmNnYkdWMlpXd2dZWE1nWVNCemRISnBibWN1WEc0Z0lDQXFJRUJ3WVhKaGJTQnRaWE56WVdkbFhHNGdJQ0FxSUVCd1lYSmhiU0J6ZEdGamExeHVJQ0FnS2lCQWNtVjBkWEp1SUVFZ1ptOXliV0YwZEdWa0lHeHZaeUJ6ZEhKcGJtY3VYRzRnSUNBcUwxeHVJQ0J3Y205MFpXTjBaV1FnWTNKbFlYUmxURzluS0Z4dUlDQWdJR3hsZG1Wc09pQk1iMmRNWlhabGJDeGNiaUFnSUNCdFpYTnpZV2RsT2lCVGRISnBibWRNYVd0bElId2dSWEp5YjNJc1hHNGdJQ0FnYzNSaFkycy9PaUJ6ZEhKcGJtZGNiaUFnS1RvZ2MzUnlhVzVuSUh0Y2JpQWdJQ0JqYjI1emRDQnNiMmM2SUhOMGNtbHVaMXRkSUQwZ1cxMDdYRzRnSUNBZ1kyOXVjM1FnYzNSNWJHVWdQU0IwYUdsekxtTnZibVpwWnloY0luTjBlV3hsWENJcE8xeHVJQ0FnSUdsbUlDaDBhR2x6TG1OdmJtWnBaeWhjSW5ScGJXVnpkR0Z0Y0Z3aUtTa2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ1pHRjBaU0E5SUc1bGR5QkVZWFJsS0NrdWRHOUpVMDlUZEhKcGJtY29LVHRjYmlBZ0lDQWdJR052Ym5OMElIUnBiV1Z6ZEdGdGNDQTlJSE4wZVd4bElEOGdURzluWjJsdVp5NTBhR1Z0WlNoa1lYUmxMQ0JjSW5ScGJXVnpkR0Z0Y0Z3aUxDQnNaWFpsYkNrZ09pQmtZWFJsTzF4dUlDQWdJQ0FnYkc5bkxuQjFjMmdvZEdsdFpYTjBZVzF3S1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb2RHaHBjeTVqYjI1bWFXY29YQ0pzYjJkTVpYWmxiRndpS1NrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnYkhac09pQnpkSEpwYm1jZ1BTQnpkSGxzWlZ4dUlDQWdJQ0FnSUNBL0lFeHZaMmRwYm1jdWRHaGxiV1VvYkdWMlpXd3NJRndpYkc5blRHVjJaV3hjSWl3Z2JHVjJaV3dwWEc0Z0lDQWdJQ0FnSURvZ2JHVjJaV3c3WEc0Z0lDQWdJQ0JzYjJjdWNIVnphQ2hzZG13cE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaDBhR2x6TG1OdmJtWnBaeWhjSW1OdmJuUmxlSFJjSWlrcElIdGNiaUFnSUNBZ0lHTnZibk4wSUdOdmJuUmxlSFE2SUhOMGNtbHVaeUE5SUhOMGVXeGxYRzRnSUNBZ0lDQWdJRDhnVEc5bloybHVaeTUwYUdWdFpTaDBhR2x6TG1OdmJuUmxlSFFzSUZ3aVkyeGhjM05jSWl3Z2JHVjJaV3dwWEc0Z0lDQWdJQ0FnSURvZ2RHaHBjeTVqYjI1MFpYaDBPMXh1SUNBZ0lDQWdiRzluTG5CMWMyZ29ZMjl1ZEdWNGRDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLSFJvYVhNdWFXUXBJSHRjYmlBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdhV1E2SUhOMGNtbHVaeUE5SUhOMGVXeGxYRzRnSUNBZ0lDQWdJQ0FnUHlCTWIyZG5hVzVuTG5Sb1pXMWxLSFJvYVhNdWFXUXNJRndpYVdSY0lpd2diR1YyWld3cFhHNGdJQ0FnSUNBZ0lDQWdPaUIwYUdsekxtbGtPMXh1SUNBZ0lDQWdJQ0JzYjJjdWNIVnphQ2hwWkNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnWTI5dWMzUWdiWE5uT2lCemRISnBibWNnUFNCemRIbHNaVnh1SUNBZ0lDQWdQeUJNYjJkbmFXNW5MblJvWlcxbEtGeHVJQ0FnSUNBZ0lDQWdJSFI1Y0dWdlppQnRaWE56WVdkbElEMDlQU0JjSW5OMGNtbHVaMXdpSUQ4Z2JXVnpjMkZuWlNBNklDaHRaWE56WVdkbElHRnpJRVZ5Y205eUtTNXRaWE56WVdkbExGeHVJQ0FnSUNBZ0lDQWdJRndpYldWemMyRm5aVndpTEZ4dUlDQWdJQ0FnSUNBZ0lHeGxkbVZzWEc0Z0lDQWdJQ0FnSUNsY2JpQWdJQ0FnSURvZ2RIbHdaVzltSUcxbGMzTmhaMlVnUFQwOUlGd2ljM1J5YVc1blhDSmNiaUFnSUNBZ0lDQWdQeUJ0WlhOellXZGxYRzRnSUNBZ0lDQWdJRG9nS0cxbGMzTmhaMlVnWVhNZ1JYSnliM0lwTG0xbGMzTmhaMlU3WEc0Z0lDQWdiRzluTG5CMWMyZ29iWE5uS1R0Y2JpQWdJQ0JwWmlBb2MzUmhZMnNnZkh3Z2JXVnpjMkZuWlNCcGJuTjBZVzVqWlc5bUlFVnljbTl5S1NCN1hHNGdJQ0FnSUNCemRHRmpheUE5SUhOMGVXeGxYRzRnSUNBZ0lDQWdJRDhnVEc5bloybHVaeTUwYUdWdFpTaGNiaUFnSUNBZ0lDQWdJQ0FnSUNoemRHRmpheUI4ZkNBb2JXVnpjMkZuWlNCaGN5QkZjbkp2Y2lrdWMzUmhZMnNwSUdGeklITjBjbWx1Wnl4Y2JpQWdJQ0FnSUNBZ0lDQWdJRndpYzNSaFkydGNJaXhjYmlBZ0lDQWdJQ0FnSUNBZ0lHeGxkbVZzWEc0Z0lDQWdJQ0FnSUNBZ0tWeHVJQ0FnSUNBZ0lDQTZJSE4wWVdOck8xeHVJQ0FnSUNBZ2JHOW5MbkIxYzJnb1lGeGNibE4wWVdOcklIUnlZV05sT2x4Y2JpUjdjM1JoWTJ0OVlDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUd4dlp5NXFiMmx1S0hSb2FYTXVZMjl1Wm1sbktGd2ljMlZ3WVhKaGRHOXlYQ0lwSUdGeklITjBjbWx1WnlrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUV4dlozTWdZU0J0WlhOellXZGxJSGRwZEdnZ2RHaGxJSE53WldOcFptbGxaQ0JzYjJjZ2JHVjJaV3d1WEc0Z0lDQXFJRUJ6ZFcxdFlYSjVJRU5vWldOcmN5QnBaaUIwYUdVZ2JXVnpjMkZuWlNCemFHOTFiR1FnWW1VZ2JHOW5aMlZrSUdKaGMyVmtJRzl1SUhSb1pTQmpkWEp5Wlc1MElHeHZaeUJzWlhabGJDeGNiaUFnSUNvZ2RHaGxiaUIxYzJWeklIUm9aU0JoY0hCeWIzQnlhV0YwWlNCamIyNXpiMnhsSUcxbGRHaHZaQ0IwYnlCdmRYUndkWFFnZEdobElHeHZaeTVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUd4bGRtVnNJQzBnVkdobElHeHZaeUJzWlhabGJDQnZaaUIwYUdVZ2JXVnpjMkZuWlM1Y2JpQWdJQ29nUUhCaGNtRnRJRzF6WnlBdElGUm9aU0J0WlhOellXZGxJSFJ2SUdKbElHeHZaMmRsWkM1Y2JpQWdJQ29nUUhCaGNtRnRJSE4wWVdOclhHNGdJQ0FxTDF4dUlDQndjbTkwWldOMFpXUWdiRzluS0Z4dUlDQWdJR3hsZG1Wc09pQk1iMmRNWlhabGJDeGNiaUFnSUNCdGMyYzZJRk4wY21sdVoweHBhMlVnZkNCRmNuSnZjaXhjYmlBZ0lDQnpkR0ZqYXo4NklITjBjbWx1WjF4dUlDQXBPaUIyYjJsa0lIdGNiaUFnSUNCcFppQW9YRzRnSUNBZ0lDQk9kVzFsY21salRHOW5UR1YyWld4elczUm9hWE11WTI5dVptbG5LRndpYkdWMlpXeGNJaWtnWVhNZ1RHOW5UR1YyWld4ZElEeGNiaUFnSUNBZ0lFNTFiV1Z5YVdOTWIyZE1aWFpsYkhOYmJHVjJaV3hkWEc0Z0lDQWdLVnh1SUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUd4bGRDQnRaWFJvYjJRN1hHNGdJQ0FnYzNkcGRHTm9JQ2hzWlhabGJDa2dlMXh1SUNBZ0lDQWdZMkZ6WlNCTWIyZE1aWFpsYkM1cGJtWnZPbHh1SUNBZ0lDQWdJQ0J0WlhSb2IyUWdQU0JqYjI1emIyeGxMbXh2Wnp0Y2JpQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0JqWVhObElFeHZaMHhsZG1Wc0xuWmxjbUp2YzJVNlhHNGdJQ0FnSUNCallYTmxJRXh2WjB4bGRtVnNMbVJsWW5Wbk9seHVJQ0FnSUNBZ0lDQnRaWFJvYjJRZ1BTQmpiMjV6YjJ4bExtUmxZblZuTzF4dUlDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJR05oYzJVZ1RHOW5UR1YyWld3dVpYSnliM0k2WEc0Z0lDQWdJQ0FnSUcxbGRHaHZaQ0E5SUdOdmJuTnZiR1V1WlhKeWIzSTdYRzRnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0Z3aVNXNTJZV3hwWkNCc2IyY2diR1YyWld4Y0lpazdYRzRnSUNBZ2ZWeHVJQ0FnSUcxbGRHaHZaQ2gwYUdsekxtTnlaV0YwWlV4dlp5aHNaWFpsYkN3Z2JYTm5MQ0J6ZEdGamF5a3BPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQk1URzluY3lCaElHQjNZWGtnZEc5dklIWmxjbUp2YzJWZ0lHOXlJR0VnYzJsc2JIa2diV1Z6YzJGblpTNWNiaUFnSUNvZ1FITjFiVzFoY25rZ1RHOW5jeUJoSUcxbGMzTmhaMlVnWVhRZ2RHaGxJRk5wYkd4NUlHeGxkbVZzSUdsbUlIUm9aU0JqZFhKeVpXNTBJSFpsY21KdmMybDBlU0JoYkd4dmQzTWdhWFF1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCdGMyY2dMU0JVYUdVZ2JXVnpjMkZuWlNCMGJ5QmlaU0JzYjJkblpXUXVYRzRnSUNBcUlFQndZWEpoYlNCMlpYSmliM05wZEhrZ0xTQlVhR1VnZG1WeVltOXphWFI1SUd4bGRtVnNJRzltSUhSb1pTQnRaWE56WVdkbElDaGtaV1poZFd4ME9pQXdLUzVjYmlBZ0lDb3ZYRzRnSUhOcGJHeDVLRzF6WnpvZ1UzUnlhVzVuVEdsclpTd2dkbVZ5WW05emFYUjVPaUJ1ZFcxaVpYSWdQU0F3S1RvZ2RtOXBaQ0I3WEc0Z0lDQWdhV1lnS0NoMGFHbHpMbU52Ym1acFp5aGNJblpsY21KdmMyVmNJaWtnWVhNZ2JuVnRZbVZ5S1NBK1BTQjJaWEppYjNOcGRIa3BYRzRnSUNBZ0lDQjBhR2x6TG14dlp5aE1iMmRNWlhabGJDNTJaWEppYjNObExDQnRjMmNwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJNYjJkeklHRWdkbVZ5WW05elpTQnRaWE56WVdkbExseHVJQ0FnS2lCQWMzVnRiV0Z5ZVNCTWIyZHpJR0VnYldWemMyRm5aU0JoZENCMGFHVWdWbVZ5WW05elpTQnNaWFpsYkNCcFppQjBhR1VnWTNWeWNtVnVkQ0IyWlhKaWIzTnBkSGtnWVd4c2IzZHpJR2wwTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2JYTm5JQzBnVkdobElHMWxjM05oWjJVZ2RHOGdZbVVnYkc5bloyVmtMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2RtVnlZbTl6YVhSNUlDMGdWR2hsSUhabGNtSnZjMmwwZVNCc1pYWmxiQ0J2WmlCMGFHVWdiV1Z6YzJGblpTQW9aR1ZtWVhWc2REb2dNQ2t1WEc0Z0lDQXFMMXh1SUNCMlpYSmliM05sS0cxelp6b2dVM1J5YVc1blRHbHJaU3dnZG1WeVltOXphWFI1T2lCdWRXMWlaWElnUFNBd0tUb2dkbTlwWkNCN1hHNGdJQ0FnYVdZZ0tDaDBhR2x6TG1OdmJtWnBaeWhjSW5abGNtSnZjMlZjSWlrZ1lYTWdiblZ0WW1WeUtTQStQU0IyWlhKaWIzTnBkSGtwWEc0Z0lDQWdJQ0IwYUdsekxteHZaeWhNYjJkTVpYWmxiQzUyWlhKaWIzTmxMQ0J0YzJjcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCTWIyZHpJR0Z1SUdsdVptOGdiV1Z6YzJGblpTNWNiaUFnSUNvZ1FITjFiVzFoY25rZ1RHOW5jeUJoSUcxbGMzTmhaMlVnWVhRZ2RHaGxJRWx1Wm04Z2JHVjJaV3d1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCdGMyY2dMU0JVYUdVZ2JXVnpjMkZuWlNCMGJ5QmlaU0JzYjJkblpXUXVYRzRnSUNBcUwxeHVJQ0JwYm1adktHMXpaem9nVTNSeWFXNW5UR2xyWlNrNklIWnZhV1FnZTF4dUlDQWdJSFJvYVhNdWJHOW5LRXh2WjB4bGRtVnNMbWx1Wm04c0lHMXpaeWs3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1FHUmxjMk55YVhCMGFXOXVJRXh2WjNNZ1lTQmtaV0oxWnlCdFpYTnpZV2RsTGx4dUlDQWdLaUJBYzNWdGJXRnllU0JNYjJkeklHRWdiV1Z6YzJGblpTQmhkQ0IwYUdVZ1JHVmlkV2NnYkdWMlpXd3VYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0J0YzJjZ0xTQlVhR1VnYldWemMyRm5aU0IwYnlCaVpTQnNiMmRuWldRdVhHNGdJQ0FxTDF4dUlDQmtaV0oxWnlodGMyYzZJRk4wY21sdVoweHBhMlVwT2lCMmIybGtJSHRjYmlBZ0lDQjBhR2x6TG14dlp5aE1iMmRNWlhabGJDNWtaV0oxWnl3Z2JYTm5LVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdURzluY3lCaGJpQmxjbkp2Y2lCdFpYTnpZV2RsTGx4dUlDQWdLaUJBYzNWdGJXRnllU0JNYjJkeklHRWdiV1Z6YzJGblpTQmhkQ0IwYUdVZ1JYSnliM0lnYkdWMlpXd3VYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0J0YzJjZ0xTQlVhR1VnYldWemMyRm5aU0IwYnlCaVpTQnNiMmRuWldRdVhHNGdJQ0FxTDF4dUlDQmxjbkp2Y2lodGMyYzZJRk4wY21sdVoweHBhMlVnZkNCRmNuSnZjaWs2SUhadmFXUWdlMXh1SUNBZ0lIUm9hWE11Ykc5bktFeHZaMHhsZG1Wc0xtVnljbTl5TENCdGMyY3BPMXh1SUNCOVhHNWNiaUFnYzJWMFEyOXVabWxuS0dOdmJtWnBaem9nVUdGeWRHbGhiRHhNYjJkbmFXNW5RMjl1Wm1sblBpa2dlMXh1SUNBZ0lIUm9hWE11WTI5dVppQTlJSHNnTGk0dUtIUm9hWE11WTI5dVppQjhmQ0I3ZlNrc0lDNHVMbU52Ym1acFp5QjlPMXh1SUNCOVhHNTlYRzVjYmk4cUtseHVJQ29nUUdSbGMyTnlhWEIwYVc5dUlFRWdjM1JoZEdsaklHTnNZWE56SUdadmNpQnRZVzVoWjJsdVp5QnNiMmRuYVc1bklHOXdaWEpoZEdsdmJuTXVYRzRnS2lCQWMzVnRiV0Z5ZVNCVWFHVWdURzluWjJsdVp5QmpiR0Z6Y3lCd2NtOTJhV1JsY3lCaElHTmxiblJ5WVd4cGVtVmtJR3h2WjJkcGJtY2diV1ZqYUdGdWFYTnRJSGRwZEdnZ2MzVndjRzl5ZENCbWIzSmNiaUFxSUdScFptWmxjbVZ1ZENCc2IyY2diR1YyWld4eklHRnVaQ0IyWlhKaWIzTnBkSGt1SUVsMElIVnpaWE1nWVNCemFXNW5iR1YwYjI0Z2NHRjBkR1Z5YmlCMGJ5QnRZV2x1ZEdGcGJpQmhJR2RzYjJKaGJGeHVJQ29nYkc5bloyVnlJR2x1YzNSaGJtTmxJR0Z1WkNCaGJHeHZkM01nWTNKbFlYUnBibWNnYzNCbFkybG1hV01nYkc5bloyVnljeUJtYjNJZ1pHbG1abVZ5Wlc1MElHTnNZWE56WlhNZ1lXNWtJRzFsZEdodlpITXVYRzRnS2x4dUlDb2dRR05zWVhOelhHNGdLaTljYm1WNGNHOXlkQ0JqYkdGemN5Qk1iMmRuYVc1bklIdGNiaUFnTHlvcVhHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQlVhR1VnWjJ4dlltRnNJR3h2WjJkbGNpQnBibk4wWVc1alpTNWNiaUFnSUNvZ1FITjFiVzFoY25rZ1FTQnphVzVuYkdWMGIyNGdhVzV6ZEdGdVkyVWdiMllnVm1WeVltOXphWFI1VEc5bloyVnlJSFZ6WldRZ1ptOXlJR2RzYjJKaGJDQnNiMmRuYVc1bkxseHVJQ0FnS2k5Y2JpQWdjSEpwZG1GMFpTQnpkR0YwYVdNZ1oyeHZZbUZzUHpvZ1RHOW5aMlZ5TzF4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1JtRmpkRzl5ZVNCbWRXNWpkR2x2YmlCbWIzSWdZM0psWVhScGJtY2diRzluWjJWeUlHbHVjM1JoYm1ObGN5NWNiaUFnSUNvZ1FITjFiVzFoY25rZ1FTQm1kVzVqZEdsdmJpQjBhR0YwSUdOeVpXRjBaWE1nYm1WM0lGWmxjbUp2YzJsMGVVeHZaMmRsY2lCcGJuTjBZVzVqWlhNdUlFSjVJR1JsWm1GMWJIUXNJR2wwSUdOeVpXRjBaWE1nWVNCTmFXNXBURzluWjJWeUxseHVJQ0FnS2k5Y2JpQWdjSEpwZG1GMFpTQnpkR0YwYVdNZ1gyWmhZM1J2Y25rNklFeHZaMmRsY2taaFkzUnZjbmtnUFNBb1hHNGdJQ0FnYjJKcVpXTjBPaUJ6ZEhKcGJtY3NYRzRnSUNBZ1kyOXVabWxuUHpvZ1VHRnlkR2xoYkR4TWIyZG5hVzVuUTI5dVptbG5QaXhjYmlBZ0lDQnBaRDg2SUhOMGNtbHVaMXh1SUNBcElEMCtJSHRjYmlBZ0lDQnlaWFIxY200Z2JtVjNJRTFwYm1sTWIyZG5aWElvYjJKcVpXTjBMQ0JqYjI1bWFXY3NJR2xrS1R0Y2JpQWdmVHRjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJEYjI1bWFXZDFjbUYwYVc5dUlHWnZjaUIwYUdVZ2JHOW5aMmx1WnlCemVYTjBaVzB1WEc0Z0lDQXFJRUJ6ZFcxdFlYSjVJRk4wYjNKbGN5QjBhR1VnWjJ4dlltRnNJSFpsY21KdmMybDBlU0JzWlhabGJDQmhibVFnYkc5bklHeGxkbVZzSUhObGRIUnBibWR6TGx4dUlDQWdLaTljYmlBZ2NISnBkbUYwWlNCemRHRjBhV01nWDJOdmJtWnBaem9nVEc5bloybHVaME52Ym1acFp5QTlJRVJsWm1GMWJIUk1iMmRuYVc1blEyOXVabWxuTzF4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1VISnBkbUYwWlNCamIyNXpkSEoxWTNSdmNpQjBieUJ3Y21WMlpXNTBJR2x1YzNSaGJuUnBZWFJwYjI0dVhHNGdJQ0FxSUVCemRXMXRZWEo1SUVWdWMzVnlaWE1nZEdoaGRDQjBhR1VnVEc5bloybHVaeUJqYkdGemN5QmpZVzV1YjNRZ1ltVWdhVzV6ZEdGdWRHbGhkR1ZrSUdGeklHbDBKM01nWkdWemFXZHVaV1FnZEc4Z1ltVWdkWE5sWkNCemRHRjBhV05oYkd4NUxseHVJQ0FnS2k5Y2JpQWdjSEpwZG1GMFpTQmpiMjV6ZEhKMVkzUnZjaWdwSUh0OVhHNWNiaUFnYzJWMFJtRmpkRzl5ZVNobVlXTjBiM0o1T2lCTWIyZG5aWEpHWVdOMGIzSjVLU0I3WEc0Z0lDQWdURzluWjJsdVp5NWZabUZqZEc5eWVTQTlJR1poWTNSdmNuazdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlGTmxkSFJsY2lCbWIzSWdkR2hsSUd4dloyZHBibWNnWTI5dVptbG5kWEpoZEdsdmJpNWNiaUFnSUNvZ1FITjFiVzFoY25rZ1FXeHNiM2R6SUhWd1pHRjBhVzVuSUhSb1pTQm5iRzlpWVd3Z2JHOW5aMmx1WnlCamIyNW1hV2QxY21GMGFXOXVMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnWTI5dVptbG5JQzBnUVc0Z2IySnFaV04wSUdOdmJuUmhhVzVwYm1jZ2RtVnlZbTl6YVhSNUlHRnVaQ0JzYjJjZ2JHVjJaV3dnYzJWMGRHbHVaM011WEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nYzJWMFEyOXVabWxuS0dOdmJtWnBaem9nVUdGeWRHbGhiRHhNYjJkbmFXNW5RMjl1Wm1sblBpa2dlMXh1SUNBZ0lFOWlhbVZqZEM1aGMzTnBaMjRvZEdocGN5NWZZMjl1Wm1sbkxDQmpiMjVtYVdjcE8xeHVJQ0I5WEc1Y2JpQWdjM1JoZEdsaklHZGxkRU52Ym1acFp5Z3BPaUJNYjJkbmFXNW5RMjl1Wm1sbklIdGNiaUFnSUNCeVpYUjFjbTRnVDJKcVpXTjBMbUZ6YzJsbmJpaDdmU3dnZEdocGN5NWZZMjl1Wm1sbktUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1VtVjBjbWxsZG1WeklHOXlJR055WldGMFpYTWdkR2hsSUdkc2IySmhiQ0JzYjJkblpYSWdhVzV6ZEdGdVkyVXVYRzRnSUNBcUlFQnpkVzF0WVhKNUlGSmxkSFZ5Ym5NZ2RHaGxJR1Y0YVhOMGFXNW5JR2RzYjJKaGJDQnNiMmRuWlhJZ2IzSWdZM0psWVhSbGN5QmhJRzVsZHlCdmJtVWdhV1lnYVhRZ1pHOWxjMjRuZENCbGVHbHpkQzVjYmlBZ0lDcGNiaUFnSUNvZ1FISmxkSFZ5YmlCVWFHVWdaMnh2WW1Gc0lGWmxjbUp2YzJsMGVVeHZaMmRsY2lCcGJuTjBZVzVqWlM1Y2JpQWdJQ292WEc0Z0lITjBZWFJwWXlCblpYUW9LVG9nVEc5bloyVnlJSHRjYmlBZ0lDQjBhR2x6TG1kc2IySmhiQ0E5SUhSb2FYTXVaMnh2WW1Gc0lEOGdkR2hwY3k1bmJHOWlZV3dnT2lCMGFHbHpMbDltWVdOMGIzSjVLRndpVEc5bloybHVaMXdpS1R0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1bmJHOWlZV3c3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1FHUmxjMk55YVhCMGFXOXVJRXh2WjNNZ1lTQjJaWEppYjNObElHMWxjM05oWjJVdVhHNGdJQ0FxSUVCemRXMXRZWEo1SUVSbGJHVm5ZWFJsY3lCMGFHVWdkbVZ5WW05elpTQnNiMmRuYVc1bklIUnZJSFJvWlNCbmJHOWlZV3dnYkc5bloyVnlJR2x1YzNSaGJtTmxMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnYlhObklDMGdWR2hsSUcxbGMzTmhaMlVnZEc4Z1ltVWdiRzluWjJWa0xseHVJQ0FnS2lCQWNHRnlZVzBnZG1WeVltOXphWFI1SUMwZ1ZHaGxJSFpsY21KdmMybDBlU0JzWlhabGJDQnZaaUIwYUdVZ2JXVnpjMkZuWlNBb1pHVm1ZWFZzZERvZ01Da3VYRzRnSUNBcUwxeHVJQ0J6ZEdGMGFXTWdkbVZ5WW05elpTaHRjMmM2SUZOMGNtbHVaMHhwYTJVc0lIWmxjbUp2YzJsMGVUb2diblZ0WW1WeUlEMGdNQ2s2SUhadmFXUWdlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWRsZENncExuWmxjbUp2YzJVb2JYTm5MQ0IyWlhKaWIzTnBkSGtwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJNYjJkeklHRnVJR2x1Wm04Z2JXVnpjMkZuWlM1Y2JpQWdJQ29nUUhOMWJXMWhjbmtnUkdWc1pXZGhkR1Z6SUhSb1pTQnBibVp2SUd4dloyZHBibWNnZEc4Z2RHaGxJR2RzYjJKaGJDQnNiMmRuWlhJZ2FXNXpkR0Z1WTJVdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQnRjMmNnTFNCVWFHVWdiV1Z6YzJGblpTQjBieUJpWlNCc2IyZG5aV1F1WEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nYVc1bWJ5aHRjMmM2SUZOMGNtbHVaMHhwYTJVcE9pQjJiMmxrSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1blpYUW9LUzVwYm1adktHMXpaeWs3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1FHUmxjMk55YVhCMGFXOXVJRXh2WjNNZ1lTQmtaV0oxWnlCdFpYTnpZV2RsTGx4dUlDQWdLaUJBYzNWdGJXRnllU0JFWld4bFoyRjBaWE1nZEdobElHUmxZblZuSUd4dloyZHBibWNnZEc4Z2RHaGxJR2RzYjJKaGJDQnNiMmRuWlhJZ2FXNXpkR0Z1WTJVdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQnRjMmNnTFNCVWFHVWdiV1Z6YzJGblpTQjBieUJpWlNCc2IyZG5aV1F1WEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nWkdWaWRXY29iWE5uT2lCVGRISnBibWRNYVd0bEtUb2dkbTlwWkNCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVoyVjBLQ2t1WkdWaWRXY29iWE5uS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnVEc5bmN5QmhJSE5wYkd4NUlHMWxjM05oWjJVdVhHNGdJQ0FxSUVCemRXMXRZWEo1SUVSbGJHVm5ZWFJsY3lCMGFHVWdaR1ZpZFdjZ2JHOW5aMmx1WnlCMGJ5QjBhR1VnWjJ4dlltRnNJR3h2WjJkbGNpQnBibk4wWVc1alpTNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJRzF6WnlBdElGUm9aU0J0WlhOellXZGxJSFJ2SUdKbElHeHZaMmRsWkM1Y2JpQWdJQ292WEc0Z0lITjBZWFJwWXlCemFXeHNlU2h0YzJjNklGTjBjbWx1WjB4cGEyVXBPaUIyYjJsa0lIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NW5aWFFvS1M1emFXeHNlU2h0YzJjcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCTWIyZHpJR0Z1SUdWeWNtOXlJRzFsYzNOaFoyVXVYRzRnSUNBcUlFQnpkVzF0WVhKNUlFUmxiR1ZuWVhSbGN5QjBhR1VnWlhKeWIzSWdiRzluWjJsdVp5QjBieUIwYUdVZ1oyeHZZbUZzSUd4dloyZGxjaUJwYm5OMFlXNWpaUzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUcxelp5QXRJRlJvWlNCdFpYTnpZV2RsSUhSdklHSmxJR3h2WjJkbFpDNWNiaUFnSUNvdlhHNGdJSE4wWVhScFl5Qmxjbkp2Y2lodGMyYzZJRk4wY21sdVoweHBhMlVwT2lCMmIybGtJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVuWlhRb0tTNWxjbkp2Y2lodGMyY3BPMXh1SUNCOVhHNWNiaUFnYzNSaGRHbGpJR1p2Y2loY2JpQWdJQ0J2WW1wbFkzUTZJRXh2WjJkcGJtZERiMjUwWlhoMExGeHVJQ0FnSUdsa1B6b2djM1J5YVc1bklId2dVR0Z5ZEdsaGJEeE1iMmRuYVc1blEyOXVabWxuUGl4Y2JpQWdJQ0JqYjI1bWFXYy9PaUJRWVhKMGFXRnNQRXh2WjJkcGJtZERiMjVtYVdjK1hHNGdJQ2s2SUV4dloyZGxjaUI3WEc0Z0lDQWdiMkpxWldOMElEMGdkSGx3Wlc5bUlHOWlhbVZqZENBOVBUMGdYQ0p6ZEhKcGJtZGNJaUEvSUc5aWFtVmpkQ0E2SUc5aWFtVmpkQzV1WVcxbE8xeHVJQ0FnSUdsa0lEMGdkSGx3Wlc5bUlHbGtJRDA5UFNCY0luTjBjbWx1WjF3aUlEOGdhV1FnT2lCMWJtUmxabWx1WldRN1hHNGdJQ0FnWTI5dVptbG5JRDBnZEhsd1pXOW1JR2xrSUQwOVBTQmNJbTlpYW1WamRGd2lJRDhnS0dsa0lHRnpJRkJoY25ScFlXdzhURzluWjJsdVowTnZibVpwWno0cElEb2dZMjl1Wm1sbk8xeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxsOW1ZV04wYjNKNUtHOWlhbVZqZEN3Z1kyOXVabWxuTENCcFpDazdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlFTnlaV0YwWlhNZ1lTQnNiMmRuWlhJZ1ptOXlJR0VnYzNCbFkybG1hV01nY21WaGMyOXVJRzl5SUdOdmJuUmxlSFF1WEc0Z0lDQXFYRzRnSUNBcUlFQnpkVzF0WVhKNUlGUm9hWE1nYzNSaGRHbGpJRzFsZEdodlpDQmpjbVZoZEdWeklHRWdibVYzSUd4dloyZGxjaUJwYm5OMFlXNWpaU0IxYzJsdVp5QjBhR1VnWm1GamRHOXllU0JtZFc1amRHbHZiaXhjYmlBZ0lDb2dZbUZ6WldRZ2IyNGdZU0JuYVhabGJpQnlaV0Z6YjI0Z2IzSWdZMjl1ZEdWNGRDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSEpsWVhOdmJpQXRJRUVnYzNSeWFXNW5JR1JsYzJOeWFXSnBibWNnZEdobElISmxZWE52YmlCdmNpQmpiMjUwWlhoMElHWnZjaUJqY21WaGRHbHVaeUIwYUdseklHeHZaMmRsY2k1Y2JpQWdJQ29nUUhCaGNtRnRJR2xrWEc0Z0lDQXFJRUJ5WlhSMWNtNXpJRUVnYm1WM0lGWmxjbUp2YzJsMGVVeHZaMmRsY2lCdmNpQkRiR0Z6YzB4dloyZGxjaUJwYm5OMFlXNWpaUzVjYmlBZ0lDb3ZYRzRnSUhOMFlYUnBZeUJpWldOaGRYTmxLSEpsWVhOdmJqb2djM1J5YVc1bkxDQnBaRDg2SUhOMGNtbHVaeWs2SUV4dloyZGxjaUI3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WDJaaFkzUnZjbmtvY21WaGMyOXVMQ0IwYUdsekxsOWpiMjVtYVdjc0lHbGtLVHRjYmlBZ2ZWeHVYRzRnSUhOMFlYUnBZeUIwYUdWdFpTaGNiaUFnSUNCMFpYaDBPaUJ6ZEhKcGJtY3NYRzRnSUNBZ2RIbHdaVG9nYTJWNWIyWWdWR2hsYldVZ2ZDQnJaWGx2WmlCTWIyZE1aWFpsYkN4Y2JpQWdJQ0JzYjJkblpYSk1aWFpsYkRvZ1RHOW5UR1YyWld3c1hHNGdJQ0FnZEdWdGNHeGhkR1U2SUZSb1pXMWxJRDBnUkdWbVlYVnNkRlJvWlcxbFhHNGdJQ2tnZTF4dUlDQWdJR2xtSUNnaGRHaHBjeTVmWTI5dVptbG5Mbk4wZVd4bEtTQnlaWFIxY200Z2RHVjRkRHRjYmlBZ0lDQmpiMjV6ZENCc2IyZG5aWElnUFNCTWIyZG5hVzVuTG1kbGRDZ3BMbVp2Y2loMGFHbHpMblJvWlcxbEtUdGNibHh1SUNBZ0lHWjFibU4wYVc5dUlHRndjR3g1S0Z4dUlDQWdJQ0FnZEhoME9pQnpkSEpwYm1jc1hHNGdJQ0FnSUNCdmNIUnBiMjQ2SUd0bGVXOW1JRlJvWlcxbFQzQjBhVzl1TEZ4dUlDQWdJQ0FnZG1Gc2RXVTZJRzUxYldKbGNpQjhJRnR1ZFcxaVpYSmRJSHdnVzI1MWJXSmxjaXdnYm5WdFltVnlMQ0J1ZFcxaVpYSmRJSHdnYm5WdFltVnlXMTBnZkNCemRISnBibWRiWFZ4dUlDQWdJQ2s2SUhOMGNtbHVaeUI3WEc0Z0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCME9pQnpkSEpwYm1jZ2ZDQlRkSGxzWldSVGRISnBibWNnUFNCMGVIUTdYRzRnSUNBZ0lDQWdJR3hsZENCaklEMGdjM1I1YkdVb2RDazdYRzVjYmlBZ0lDQWdJQ0FnWm5WdVkzUnBiMjRnWVhCd2JIbERiMnh2Y2loY2JpQWdJQ0FnSUNBZ0lDQjJZV3c2SUc1MWJXSmxjaUI4SUZ0dWRXMWlaWEpkSUh3Z1cyNTFiV0psY2l3Z2JuVnRZbVZ5TENCdWRXMWlaWEpkTEZ4dUlDQWdJQ0FnSUNBZ0lHbHpRbWNnUFNCbVlXeHpaVnh1SUNBZ0lDQWdJQ0FwT2lCVGRIbHNaV1JUZEhKcGJtY2dlMXh1SUNBZ0lDQWdJQ0FnSUd4bGRDQm1PbHh1SUNBZ0lDQWdJQ0FnSUNBZ2ZDQjBlWEJsYjJZZ1l5NWlZV05yWjNKdmRXNWtYRzRnSUNBZ0lDQWdJQ0FnSUNCOElIUjVjR1Z2WmlCakxtWnZjbVZuY205MWJtUmNiaUFnSUNBZ0lDQWdJQ0FnSUh3Z2RIbHdaVzltSUdNdWNtZGlYRzRnSUNBZ0lDQWdJQ0FnSUNCOElIUjVjR1Z2WmlCakxtTnZiRzl5TWpVMklEMGdhWE5DWnlBL0lHTXVZbUZqYTJkeWIzVnVaQ0E2SUdNdVptOXlaV2R5YjNWdVpEdGNiaUFnSUNBZ0lDQWdJQ0JwWmlBb0lVRnljbUY1TG1selFYSnlZWGtvZG1Gc0tTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUNobUlHRnpJSFI1Y0dWdlppQmpMbUpoWTJ0bmNtOTFibVFnZkNCMGVYQmxiMllnWXk1bWIzSmxaM0p2ZFc1a0tTNWpZV3hzS0Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JqTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVd4MVpTQmhjeUJ1ZFcxaVpYSmNiaUFnSUNBZ0lDQWdJQ0FnSUNrN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUhOM2FYUmphQ0FvZG1Gc0xteGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQXhPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQm1JRDBnYVhOQ1p5QS9JR011WW1kRGIyeHZjakkxTmlBNklHTXVZMjlzYjNJeU5UWTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlBb1ppQmhjeUIwZVhCbGIyWWdZeTVpWjBOdmJHOXlNalUySUh3Z2RIbHdaVzltSUdNdVkyOXNiM0l5TlRZcEtIWmhiRnN3WFNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElETTZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHWWdQU0JwYzBKbklEOGdZeTVpWjFKbllpQTZJR011Y21kaU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWXk1eVoySW9kbUZzV3pCZExDQjJZV3hiTVYwc0lIWmhiRnN5WFNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnNiMmRuWlhJdVpYSnliM0lvWUU1dmRDQmhJSFpoYkdsa0lHTnZiRzl5SUc5d2RHbHZiam9nSkh0dmNIUnBiMjU5WUNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ6ZEhsc1pTaDBJR0Z6SUhOMGNtbHVaeWs3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnWm5WdVkzUnBiMjRnWVhCd2JIbFRkSGxzWlNoMk9pQnVkVzFpWlhJZ2ZDQnpkSEpwYm1jcE9pQjJiMmxrSUh0Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JSFlnUFQwOUlGd2liblZ0WW1WeVhDSXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTWdQU0JqTG5OMGVXeGxLSFlwTzF4dUlDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqSUQwZ1kxdDJJR0Z6SUd0bGVXOW1JRU52Ykc5eWFYcGxUM0IwYVc5dWMxMGdZWE1nVTNSNWJHVmtVM1J5YVc1bk8xeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lITjNhWFJqYUNBb2IzQjBhVzl1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdZMkZ6WlNCY0ltSm5YQ0k2WEc0Z0lDQWdJQ0FnSUNBZ1kyRnpaU0JjSW1ablhDSTZYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWVhCd2JIbERiMnh2Y2loMllXeDFaU0JoY3lCdWRXMWlaWElwTG5SbGVIUTdYRzRnSUNBZ0lDQWdJQ0FnWTJGelpTQmNJbk4wZVd4bFhDSTZYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9RWEp5WVhrdWFYTkJjbkpoZVNoMllXeDFaU2twSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1Gc2RXVXVabTl5UldGamFDaGhjSEJzZVZOMGVXeGxLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdGd2NHeDVVM1I1YkdVb2RtRnNkV1VnWVhNZ2JuVnRZbVZ5SUh3Z2MzUnlhVzVuS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCakxuUmxlSFE3WEc0Z0lDQWdJQ0FnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUNBZ0lDQWdJR3h2WjJkbGNpNWxjbkp2Y2loZ1RtOTBJR0VnZG1Gc2FXUWdkR2hsYldVZ2IzQjBhVzl1T2lBa2UyOXdkR2x2Ym4xZ0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDOHZJR1Z6YkdsdWRDMWthWE5oWW14bExXNWxlSFF0YkdsdVpTQkFkSGx3WlhOamNtbHdkQzFsYzJ4cGJuUXZibTh0ZFc1MWMyVmtMWFpoY25OY2JpQWdJQ0FnSUgwZ1kyRjBZMmdnS0dVNklIVnVhMjV2ZDI0cElIdGNiaUFnSUNBZ0lDQWdiRzluWjJWeUxtVnljbTl5S0dCRmNuSnZjaUJoY0hCc2VXbHVaeUJ6ZEhsc1pUb2dKSHR2Y0hScGIyNTlJSGRwZEdnZ2RtRnNkV1VnSkh0MllXeDFaWDFnS1R0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSNGREdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCamIyNXpkQ0JwYm1ScGRtbGtkV0ZzVkdobGJXVWdQU0IwWlcxd2JHRjBaVnQwZVhCbElHRnpJR3RsZVc5bUlGUm9aVzFsWFR0Y2JpQWdJQ0JwWmlBb0lXbHVaR2wyYVdSMVlXeFVhR1Z0WlNCOGZDQWhUMkpxWldOMExtdGxlWE1vYVc1a2FYWnBaSFZoYkZSb1pXMWxLUzVzWlc1bmRHZ3BJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQjBaWGgwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR3hsZENCaFkzUjFZV3hVYUdWdFpUb2dWR2hsYldWUGNIUnBiMjRnUFNCcGJtUnBkbWxrZFdGc1ZHaGxiV1VnWVhNZ1ZHaGxiV1ZQY0hScGIyNDdYRzVjYmlBZ0lDQmpiMjV6ZENCc2IyZE1aWFpsYkhNZ1BTQlBZbXBsWTNRdVlYTnphV2R1S0h0OUxDQk1iMmRNWlhabGJDazdYRzRnSUNBZ2FXWWdLRTlpYW1WamRDNXJaWGx6S0dsdVpHbDJhV1IxWVd4VWFHVnRaU2xiTUYwZ2FXNGdiRzluVEdWMlpXeHpLVnh1SUNBZ0lDQWdZV04wZFdGc1ZHaGxiV1VnUFZ4dUlDQWdJQ0FnSUNBb2FXNWthWFpwWkhWaGJGUm9aVzFsSUdGeklGUm9aVzFsVDNCMGFXOXVRbmxNYjJkTVpYWmxiQ2xiYkc5bloyVnlUR1YyWld4ZElIeDhJSHQ5TzF4dVhHNGdJQ0FnY21WMGRYSnVJRTlpYW1WamRDNXJaWGx6S0dGamRIVmhiRlJvWlcxbEtTNXlaV1IxWTJVb0tHRmpZem9nYzNSeWFXNW5MQ0JyWlhrNklITjBjbWx1WnlrZ1BUNGdlMXh1SUNBZ0lDQWdZMjl1YzNRZ2RtRnNJRDBnS0dGamRIVmhiRlJvWlcxbElHRnpJRlJvWlcxbFQzQjBhVzl1S1Z0clpYa2dZWE1nYTJWNWIyWWdWR2hsYldWUGNIUnBiMjVkTzF4dUlDQWdJQ0FnYVdZZ0tIWmhiQ2xjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR0Z3Y0d4NUtGeHVJQ0FnSUNBZ0lDQWdJR0ZqWXl4Y2JpQWdJQ0FnSUNBZ0lDQnJaWGtnWVhNZ2EyVjViMllnVkdobGJXVlBjSFJwYjI0c1hHNGdJQ0FnSUNBZ0lDQWdkbUZzSUdGelhHNGdJQ0FnSUNBZ0lDQWdJQ0I4SUc1MWJXSmxjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2ZDQmJiblZ0WW1WeVhWeHVJQ0FnSUNBZ0lDQWdJQ0FnZkNCYmJuVnRZbVZ5TENCdWRXMWlaWElzSUc1MWJXSmxjbDFjYmlBZ0lDQWdJQ0FnSUNBZ0lId2diblZ0WW1WeVcxMWNiaUFnSUNBZ0lDQWdJQ0FnSUh3Z2MzUnlhVzVuVzExY2JpQWdJQ0FnSUNBZ0tUdGNiaUFnSUNBZ0lISmxkSFZ5YmlCaFkyTTdYRzRnSUNBZ2ZTd2dkR1Y0ZENrN1hHNGdJSDFjYm4xY2JpSmRmUT09IiwiaW1wb3J0IHtcbiAgQW5zd2VycyxcbiAgQ2hvaWNlLFxuICBGYWxzeSxcbiAgSW5pdGlhbFJldHVyblZhbHVlLFxuICBQcmV2Q2FsbGVyLFxuICBQcm9tcHRPYmplY3QsXG4gIFByb21wdFR5cGUsXG4gIFZhbHVlT3JGdW5jLFxufSBmcm9tIFwicHJvbXB0c1wiO1xuaW1wb3J0IHByb21wdHMgZnJvbSBcInByb21wdHNcIjtcbmltcG9ydCB7IHBhcnNlQXJncywgUGFyc2VBcmdzQ29uZmlnIH0gZnJvbSBcInV0aWxcIjtcbmltcG9ydCB7IFdyaXRhYmxlLCBSZWFkYWJsZSB9IGZyb20gXCJzdHJlYW1cIjtcbmltcG9ydCB7IEtsZXVyLCBQYXJzZUFyZ3NPcHRpb25zQ29uZmlnLCBQYXJzZUFyZ3NSZXN1bHQgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXByZXNlbnRzIGEgdXNlciBpbnB1dCBwcm9tcHQgd2l0aCB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAqIEBzdW1tYXJ5IFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBmbGV4aWJsZSBpbnRlcmZhY2UgZm9yIGNyZWF0aW5nIGFuZCBtYW5hZ2luZyB1c2VyIGlucHV0IHByb21wdHMuXG4gKiBJdCBpbXBsZW1lbnRzIHRoZSBQcm9tcHRPYmplY3QgaW50ZXJmYWNlIGZyb20gdGhlICdwcm9tcHRzJyBsaWJyYXJ5IGFuZCBvZmZlcnMgbWV0aG9kcyB0byBzZXRcbiAqIHZhcmlvdXMgcHJvcGVydGllcyBvZiB0aGUgcHJvbXB0LiBUaGUgY2xhc3MgYWxzbyBpbmNsdWRlcyBzdGF0aWMgbWV0aG9kcyBmb3IgY29tbW9uIGlucHV0IHNjZW5hcmlvc1xuICogYW5kIGFyZ3VtZW50IHBhcnNpbmcuXG4gKlxuICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgcHJvbXB0IG5hbWUsIGV4dGVuZGluZyBzdHJpbmcuXG4gKlxuICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvbXB0LCB1c2VkIGFzIHRoZSBrZXkgaW4gdGhlIHJldHVybmVkIGFuc3dlcnMgb2JqZWN0LlxuICpcbiAqIEBjbGFzc1xuICovXG5leHBvcnQgY2xhc3MgVXNlcklucHV0PFIgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+IGltcGxlbWVudHMgUHJvbXB0T2JqZWN0PFI+IHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgbG9nZ2VyID0gTG9nZ2luZy5mb3IoVXNlcklucHV0KTtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgdHlwZSBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIHRoZSBpbnB1dCBtZXRob2QgKGUuZy4sIHRleHQsIG51bWJlciwgY29uZmlybSkuXG4gICAqL1xuICB0eXBlOiBQcm9tcHRUeXBlIHwgRmFsc3kgfCBQcmV2Q2FsbGVyPFIsIFByb21wdFR5cGUgfCBGYWxzeT4gPSBcInRleHRcIjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBuYW1lIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IFVzZWQgYXMgdGhlIGtleSBpbiB0aGUgcmV0dXJuZWQgYW5zd2VycyBvYmplY3QuXG4gICAqL1xuICBuYW1lOiBWYWx1ZU9yRnVuYzxSPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBtZXNzYWdlIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICogQHN1bW1hcnkgVGhlIHF1ZXN0aW9uIG9yIGluc3RydWN0aW9uIHByZXNlbnRlZCB0byB0aGUgdXNlci5cbiAgICovXG4gIG1lc3NhZ2U/OiBWYWx1ZU9yRnVuYzxzdHJpbmc+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgVGhlIGRlZmF1bHQgdmFsdWUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgaW5pdGlhbD86XG4gICAgfCBJbml0aWFsUmV0dXJuVmFsdWVcbiAgICB8IFByZXZDYWxsZXI8UiwgSW5pdGlhbFJldHVyblZhbHVlIHwgUHJvbWlzZTxJbml0aWFsUmV0dXJuVmFsdWU+PlxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHN0eWxlIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IERldGVybWluZXMgdGhlIHZpc3VhbCBzdHlsZSBvZiB0aGUgcHJvbXB0LlxuICAgKi9cbiAgc3R5bGU/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBmb3JtYXQgZnVuY3Rpb24gZm9yIHRoZSBpbnB1dC5cbiAgICogQHN1bW1hcnkgQSBmdW5jdGlvbiB0byBmb3JtYXQgdGhlIHVzZXIncyBpbnB1dCBiZWZvcmUgaXQncyByZXR1cm5lZC5cbiAgICovXG4gIGZvcm1hdD86IFByZXZDYWxsZXI8Uiwgdm9pZD4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgdmFsaWRhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGlucHV0LlxuICAgKiBAc3VtbWFyeSBBIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSB1c2VyJ3MgaW5wdXQuXG4gICAqL1xuICB2YWxpZGF0ZT86XG4gICAgfCBQcmV2Q2FsbGVyPFIsIGJvb2xlYW4gfCBzdHJpbmcgfCBQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+PlxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG9uU3RhdGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEBzdW1tYXJ5IEEgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIHN0YXRlIG9mIHRoZSBwcm9tcHQgY2hhbmdlcy5cbiAgICovXG4gIG9uU3RhdGU/OiBQcmV2Q2FsbGVyPFIsIHZvaWQ+IHwgdW5kZWZpbmVkO1xuXG4gIG9uUmVuZGVyPzogKChrbGV1cjogS2xldXIpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG1pbmltdW0gdmFsdWUgZm9yIG51bWJlciBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBsb3dlc3QgbnVtYmVyIHRoZSB1c2VyIGNhbiBpbnB1dC5cbiAgICovXG4gIG1pbj86IG51bWJlciB8IFByZXZDYWxsZXI8UiwgbnVtYmVyIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG1heGltdW0gdmFsdWUgZm9yIG51bWJlciBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBoaWdoZXN0IG51bWJlciB0aGUgdXNlciBjYW4gaW5wdXQuXG4gICAqL1xuICBtYXg/OiBudW1iZXIgfCBQcmV2Q2FsbGVyPFIsIG51bWJlciB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFdoZXRoZXIgdG8gYWxsb3cgZmxvYXQgdmFsdWVzIGZvciBudW1iZXIgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBJZiB0cnVlLCBhbGxvd3MgZGVjaW1hbCBudW1iZXJzLlxuICAgKi9cbiAgZmxvYXQ/OiBib29sZWFuIHwgUHJldkNhbGxlcjxSLCBib29sZWFuIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyB0byByb3VuZCB0byBmb3IgZmxvYXQgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIHRoZSBwcmVjaXNpb24gb2YgZmxvYXQgaW5wdXRzLlxuICAgKi9cbiAgcm91bmQ/OiBudW1iZXIgfCBQcmV2Q2FsbGVyPFIsIG51bWJlciB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEluc3RydWN0aW9ucyBmb3IgdGhlIHVzZXIuXG4gICAqIEBzdW1tYXJ5IEFkZGl0aW9uYWwgZ3VpZGFuY2UgcHJvdmlkZWQgdG8gdGhlIHVzZXIuXG4gICAqL1xuICBpbnN0cnVjdGlvbnM/OiBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGluY3JlbWVudCB2YWx1ZSBmb3IgbnVtYmVyIGlucHV0cy5cbiAgICogQHN1bW1hcnkgVGhlIHN0ZXAgc2l6ZSB3aGVuIGluY3JlYXNpbmcgb3IgZGVjcmVhc2luZyB0aGUgbnVtYmVyLlxuICAgKi9cbiAgaW5jcmVtZW50PzogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgc2VwYXJhdG9yIGZvciBsaXN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgVGhlIGNoYXJhY3RlciB1c2VkIHRvIHNlcGFyYXRlIGxpc3QgaXRlbXMuXG4gICAqL1xuICBzZXBhcmF0b3I/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBhY3RpdmUgb3B0aW9uIHN0eWxlIGZvciBzZWxlY3QgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBUaGUgc3R5bGUgYXBwbGllZCB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9wdGlvbi5cbiAgICovXG4gIGFjdGl2ZT86IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGluYWN0aXZlIG9wdGlvbiBzdHlsZSBmb3Igc2VsZWN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgVGhlIHN0eWxlIGFwcGxpZWQgdG8gbm9uLXNlbGVjdGVkIG9wdGlvbnMuXG4gICAqL1xuICBpbmFjdGl2ZT86IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIGNob2ljZXM/OiBDaG9pY2VbXSB8IFByZXZDYWxsZXI8UiwgQ2hvaWNlW10gfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgaGludCB0ZXh0IGZvciB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICovXG4gIGhpbnQ/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSB3YXJuaW5nIHRleHQgZm9yIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IEEgd2FybmluZyBtZXNzYWdlIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICovXG4gIHdhcm4/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICBzdWdnZXN0PzogKChpbnB1dDogYW55LCBjaG9pY2VzOiBDaG9pY2VbXSkgPT4gUHJvbWlzZTxhbnk+KSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBsaW1pdCBmb3IgbGlzdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBzZWxlY3RlZC5cbiAgICovXG4gIGxpbWl0PzogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbWFzayBmb3IgcGFzc3dvcmQgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBUaGUgY2hhcmFjdGVyIHVzZWQgdG8gaGlkZSB0aGUgdXNlcidzIGlucHV0LlxuICAgKi9cbiAgbWFzaz86IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHN0ZG91dCBzdHJlYW0gZm9yIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IFRoZSBvdXRwdXQgc3RyZWFtIHVzZWQgYnkgdGhlIHByb21wdC5cbiAgICovXG4gIHN0ZG91dD86IFdyaXRhYmxlIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHN0ZGluIHN0cmVhbSBmb3IgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgVGhlIGlucHV0IHN0cmVhbSB1c2VkIGJ5IHRoZSBwcm9tcHQuXG4gICAqL1xuICBzdGRpbj86IFJlYWRhYmxlIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBVc2VySW5wdXQgaW5zdGFuY2UuXG4gICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgbmV3IFVzZXJJbnB1dCBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvbXB0LlxuICAgKi9cbiAgY29uc3RydWN0b3IobmFtZTogVmFsdWVPckZ1bmM8Uj4pIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSB0eXBlIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIGlucHV0IG1ldGhvZCBmb3IgdGhlIHByb21wdC5cbiAgICpcbiAgICogQHBhcmFtIHR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgcHJvbXB0LlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0VHlwZSh0eXBlOiBQcm9tcHRUeXBlIHwgRmFsc3kgfCBQcmV2Q2FsbGVyPFIsIFByb21wdFR5cGUgfCBGYWxzeT4pOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgdHlwZSB0bzogJHt0eXBlfWApO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIG1lc3NhZ2Ugb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgcXVlc3Rpb24gb3IgaW5zdHJ1Y3Rpb24gcHJlc2VudGVkIHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgbWVzc2FnZSB0byBiZSBkaXNwbGF5ZWQuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRNZXNzYWdlKHZhbHVlOiBWYWx1ZU9yRnVuYzxzdHJpbmc+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIG1lc3NhZ2UgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5tZXNzYWdlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgZGVmYXVsdCB2YWx1ZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbml0aWFsIHZhbHVlLlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0SW5pdGlhbChcbiAgICB2YWx1ZTpcbiAgICAgIHwgSW5pdGlhbFJldHVyblZhbHVlXG4gICAgICB8IFByZXZDYWxsZXI8UiwgSW5pdGlhbFJldHVyblZhbHVlIHwgUHJvbWlzZTxJbml0aWFsUmV0dXJuVmFsdWU+PlxuICAgICAgfCB1bmRlZmluZWRcbiAgKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGluaXRpYWwgdmFsdWUgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5pbml0aWFsID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIHN0eWxlIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIHZpc3VhbCBzdHlsZSBvZiB0aGUgcHJvbXB0LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgc3R5bGUgdG8gYmUgYXBwbGllZC5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldFN0eWxlKHZhbHVlOiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBzdHlsZSB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLnN0eWxlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGZvcm1hdCBmdW5jdGlvbiBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIGEgZnVuY3Rpb24gdG8gZm9ybWF0IHRoZSB1c2VyJ3MgaW5wdXQgYmVmb3JlIGl0J3MgcmV0dXJuZWQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBmb3JtYXQgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRGb3JtYXQodmFsdWU6IFByZXZDYWxsZXI8Uiwgdm9pZD4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgZm9ybWF0IGZ1bmN0aW9uYCk7XG4gICAgdGhpcy5mb3JtYXQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgdmFsaWRhdGlvbiBmdW5jdGlvbiBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIGEgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIHVzZXIncyBpbnB1dC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbGlkYXRpb24gZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRWYWxpZGF0ZShcbiAgICB2YWx1ZTpcbiAgICAgIHwgUHJldkNhbGxlcjxSLCBib29sZWFuIHwgc3RyaW5nIHwgUHJvbWlzZTxib29sZWFuIHwgc3RyaW5nPj5cbiAgICAgIHwgdW5kZWZpbmVkXG4gICk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyB2YWxpZGF0ZSBmdW5jdGlvbmApO1xuICAgIHRoaXMudmFsaWRhdGUgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgb25TdGF0ZSBjYWxsYmFjayBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHN0YXRlIG9mIHRoZSBwcm9tcHQgY2hhbmdlcy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIG9uU3RhdGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRPblN0YXRlKHZhbHVlOiBQcmV2Q2FsbGVyPFIsIHZvaWQ+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIG9uU3RhdGUgY2FsbGJhY2tgKTtcbiAgICB0aGlzLm9uU3RhdGUgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgb25SZW5kZXIgY2FsbGJhY2sgb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBwcm9tcHQgaXMgcmVuZGVyZWQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBvblJlbmRlciBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldE9uUmVuZGVyKHZhbHVlOiAoKGtsZXVyOiBLbGV1cikgPT4gdm9pZCkgfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgb25SZW5kZXIgY2FsbGJhY2tgKTtcbiAgICB0aGlzLm9uUmVuZGVyID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIG1pbmltdW0gdmFsdWUgZm9yIG51bWJlciBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIGxvd2VzdCBudW1iZXIgdGhlIHVzZXIgY2FuIGlucHV0LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgbWluaW11bSB2YWx1ZS5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldE1pbih2YWx1ZTogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgbWluIHZhbHVlIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMubWluID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIG1heGltdW0gdmFsdWUgZm9yIG51bWJlciBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIGhpZ2hlc3QgbnVtYmVyIHRoZSB1c2VyIGNhbiBpbnB1dC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIG1heGltdW0gdmFsdWUuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRNYXgodmFsdWU6IG51bWJlciB8IFByZXZDYWxsZXI8UiwgbnVtYmVyIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIG1heCB2YWx1ZSB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLm1heCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHdoZXRoZXIgdG8gYWxsb3cgZmxvYXQgdmFsdWVzIGZvciBudW1iZXIgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHdoZXRoZXIgZGVjaW1hbCBudW1iZXJzIGFyZSBhbGxvd2VkLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBXaGV0aGVyIHRvIGFsbG93IGZsb2F0IHZhbHVlcy5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldEZsb2F0KHZhbHVlOiBib29sZWFuIHwgUHJldkNhbGxlcjxSLCBib29sZWFuIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGZsb2F0IHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMuZmxvYXQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIHRvIHJvdW5kIHRvIGZvciBmbG9hdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIHByZWNpc2lvbiBvZiBmbG9hdCBpbnB1dHMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRSb3VuZCh2YWx1ZTogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgcm91bmQgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5yb3VuZCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBpbnN0cnVjdGlvbnMgZm9yIHRoZSB1c2VyLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIGFkZGl0aW9uYWwgZ3VpZGFuY2UgcHJvdmlkZWQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbnN0cnVjdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRJbnN0cnVjdGlvbnModmFsdWU6IHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgaW5zdHJ1Y3Rpb25zIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMuaW5zdHJ1Y3Rpb25zID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGluY3JlbWVudCB2YWx1ZSBmb3IgbnVtYmVyIGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgc3RlcCBzaXplIHdoZW4gaW5jcmVhc2luZyBvciBkZWNyZWFzaW5nIHRoZSBudW1iZXIuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbmNyZW1lbnQgdmFsdWUuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRJbmNyZW1lbnQoXG4gICAgdmFsdWU6IG51bWJlciB8IFByZXZDYWxsZXI8UiwgbnVtYmVyIHwgRmFsc3k+IHwgdW5kZWZpbmVkXG4gICk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBpbmNyZW1lbnQgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5pbmNyZW1lbnQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgc2VwYXJhdG9yIGZvciBsaXN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgY2hhcmFjdGVyIHVzZWQgdG8gc2VwYXJhdGUgbGlzdCBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHNlcGFyYXRvciBjaGFyYWN0ZXIuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRTZXBhcmF0b3IoXG4gICAgdmFsdWU6IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkXG4gICk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBzZXBhcmF0b3IgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5zZXBhcmF0b3IgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgYWN0aXZlIG9wdGlvbiBzdHlsZSBmb3Igc2VsZWN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgc3R5bGUgYXBwbGllZCB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9wdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGFjdGl2ZSBvcHRpb24gc3R5bGUuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRBY3RpdmUodmFsdWU6IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGFjdGl2ZSBzdHlsZSB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLmFjdGl2ZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBpbmFjdGl2ZSBvcHRpb24gc3R5bGUgZm9yIHNlbGVjdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIHN0eWxlIGFwcGxpZWQgdG8gbm9uLXNlbGVjdGVkIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbmFjdGl2ZSBvcHRpb24gc3R5bGUuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRJbmFjdGl2ZSh2YWx1ZTogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgaW5hY3RpdmUgc3R5bGUgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5pbmFjdGl2ZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0Q2hvaWNlcyhcbiAgICB2YWx1ZTogQ2hvaWNlW10gfCBQcmV2Q2FsbGVyPFIsIENob2ljZVtdIHwgRmFsc3k+IHwgdW5kZWZpbmVkXG4gICk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBjaG9pY2VzOiAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICB0aGlzLmNob2ljZXMgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgaGludCB0ZXh0IGZvciB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgaGludCB0ZXh0LlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0SGludCh2YWx1ZTogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgaGludCB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLmhpbnQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgd2FybmluZyB0ZXh0IGZvciB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIGEgd2FybmluZyBtZXNzYWdlIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHdhcm5pbmcgdGV4dC5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldFdhcm4odmFsdWU6IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIHdhcm4gdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy53YXJuID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRTdWdnZXN0KFxuICAgIHZhbHVlOiAoKGlucHV0OiBhbnksIGNob2ljZXM6IENob2ljZVtdKSA9PiBQcm9taXNlPGFueT4pIHwgdW5kZWZpbmVkXG4gICk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBzdWdnZXN0IGZ1bmN0aW9uYCk7XG4gICAgdGhpcy5zdWdnZXN0ID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGxpbWl0IGZvciBsaXN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdGhhdCBjYW4gYmUgc2VsZWN0ZWQgaW4gbGlzdC10eXBlIHByb21wdHMuXG4gICAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHR5cGUgb2YgdGhlIHByb21wdCBuYW1lLCBleHRlbmRpbmcgc3RyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdGhhdCBjYW4gYmUgc2VsZWN0ZWQsIG9yIGEgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHRoaXMgdmFsdWUuXG4gICAqIEByZXR1cm4gVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldExpbWl0KHZhbHVlOiBudW1iZXIgfCBQcmV2Q2FsbGVyPFIsIG51bWJlciB8IEZhbHN5PiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBsaW1pdCB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLmxpbWl0ID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIG1hc2sgZm9yIHBhc3N3b3JkIGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgY2hhcmFjdGVyIHVzZWQgdG8gaGlkZSB0aGUgdXNlcidzIGlucHV0IGluIHBhc3N3b3JkLXR5cGUgcHJvbXB0cy5cbiAgICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgcHJvbXB0IG5hbWUsIGV4dGVuZGluZyBzdHJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBjaGFyYWN0ZXIgdXNlZCB0byBtYXNrIHRoZSBpbnB1dCwgb3IgYSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhpcyB2YWx1ZS5cbiAgICogQHJldHVybiBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0TWFzayh2YWx1ZTogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgbWFzayB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLm1hc2sgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgc3Rkb3V0IHN0cmVhbSBmb3IgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgb3V0cHV0IHN0cmVhbSB1c2VkIGJ5IHRoZSBwcm9tcHQgZm9yIGRpc3BsYXlpbmcgbWVzc2FnZXMgYW5kIHJlc3VsdHMuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gYmUgdXNlZCBhcyBzdGRvdXQuXG4gICAqIEByZXR1cm4gVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldFN0ZG91dCh2YWx1ZTogV3JpdGFibGUgfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgc3Rkb3V0IHN0cmVhbWApO1xuICAgIHRoaXMuc3Rkb3V0ID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBzdGRpbiBzdHJlYW0gZm9yIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIGlucHV0IHN0cmVhbSB1c2VkIGJ5IHRoZSBwcm9tcHQgZm9yIHJlY2VpdmluZyB1c2VyIGlucHV0LlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGJlIHVzZWQgYXMgc3RkaW4uXG4gICAqIEByZXR1cm4gVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldFN0ZGluKHZhbHVlOiBSZWFkYWJsZSB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIHRoaXMuc3RkaW4gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXNrcyB0aGUgdXNlciBmb3IgaW5wdXQgYmFzZWQgb24gdGhlIGN1cnJlbnQgVXNlcklucHV0IGNvbmZpZ3VyYXRpb24uXG4gICAqIEBzdW1tYXJ5IFByb21wdHMgdGhlIHVzZXIgYW5kIHJldHVybnMgdGhlaXIgcmVzcG9uc2UgYXMgYSBzaW5nbGUgdmFsdWUuXG4gICAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHR5cGUgb2YgdGhlIHByb21wdCBuYW1lLCBleHRlbmRpbmcgc3RyaW5nLlxuICAgKiBAcmV0dXJuIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSB1c2VyJ3MgYW5zd2VyLlxuICAgKi9cbiAgYXN5bmMgYXNrKCkge1xuICAgIHJldHVybiAoYXdhaXQgVXNlcklucHV0LmFzayh0aGlzKSlbdGhpcy5uYW1lIGFzIGtleW9mIEFuc3dlcnM8Uj5dO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBc2tzIHRoZSB1c2VyIG9uZSBvciBtb3JlIHF1ZXN0aW9ucyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgVXNlcklucHV0IGNvbmZpZ3VyYXRpb25zLlxuICAgKiBAc3VtbWFyeSBQcm9tcHRzIHRoZSB1c2VyIHdpdGggb25lIG9yIG1vcmUgcXVlc3Rpb25zIGFuZCByZXR1cm5zIHRoZWlyIGFuc3dlcnMgYXMgYW4gb2JqZWN0LlxuICAgKiBAdGVtcGxhdGUgUiAtIFRoZSB0eXBlIG9mIHRoZSBwcm9tcHQgbmFtZSwgZXh0ZW5kaW5nIHN0cmluZy5cbiAgICogQHBhcmFtIHF1ZXN0aW9uIC0gQSBzaW5nbGUgVXNlcklucHV0IGluc3RhbmNlIG9yIGFuIGFycmF5IG9mIFVzZXJJbnB1dCBpbnN0YW5jZXMuXG4gICAqIEByZXR1cm4gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVzZXIncyBhbnN3ZXJzLlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAgICogICBwYXJ0aWNpcGFudCBBIGFzIGFzayBtZXRob2RcbiAgICogICBwYXJ0aWNpcGFudCBQIGFzIHByb21wdHMgbGlicmFyeVxuICAgKiAgIEEtPj5QOiBDYWxsIHByb21wdHMgd2l0aCBxdWVzdGlvbihzKVxuICAgKiAgIFAtPj5VOiBEaXNwbGF5IHByb21wdChzKVxuICAgKiAgIFUtPj5QOiBQcm92aWRlIGlucHV0XG4gICAqICAgUC0+PkE6IFJldHVybiBhbnN3ZXJzXG4gICAqICAgQS0+PkE6IFByb2Nlc3MgYW5zd2Vyc1xuICAgKiAgIEEtLT4+Q2FsbGVyOiBSZXR1cm4gcHJvY2Vzc2VkIGFuc3dlcnNcbiAgICovXG4gIHN0YXRpYyBhc3luYyBhc2s8UiBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4oXG4gICAgcXVlc3Rpb246IFVzZXJJbnB1dDxSPiB8IFVzZXJJbnB1dDxSPltdXG4gICkge1xuICAgIGNvbnN0IGxvZyA9IFVzZXJJbnB1dC5sb2dnZXIuZm9yKHRoaXMuYXNrKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocXVlc3Rpb24pKSB7XG4gICAgICBxdWVzdGlvbiA9IFtxdWVzdGlvbl07XG4gICAgfVxuICAgIGxldCBhbnN3ZXJzOiBBbnN3ZXJzPFI+O1xuICAgIHRyeSB7XG4gICAgICBsb2cudmVyYm9zZShcbiAgICAgICAgYEFza2luZyBxdWVzdGlvbnM6ICR7cXVlc3Rpb24ubWFwKChxKSA9PiBxLm5hbWUpLmpvaW4oXCIsIFwiKX1gXG4gICAgICApO1xuICAgICAgYW5zd2VycyA9IGF3YWl0IHByb21wdHMocXVlc3Rpb24pO1xuICAgICAgbG9nLnZlcmJvc2UoYFJlY2VpdmVkIGFuc3dlcnM6ICR7SlNPTi5zdHJpbmdpZnkoYW5zd2VycywgbnVsbCwgMil9YCk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgZ2V0dGluZyBpbnB1dDogJHtlcnJvcn1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGFuc3dlcnM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFza3MgdGhlIHVzZXIgZm9yIGEgbnVtYmVyIGlucHV0LlxuICAgKiBAc3VtbWFyeSBQcm9tcHRzIHRoZSB1c2VyIHRvIGVudGVyIGEgbnVtYmVyLCB3aXRoIG9wdGlvbmFsIG1pbmltdW0sIG1heGltdW0sIGFuZCBpbml0aWFsIHZhbHVlcy5cbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvbXB0LCB1c2VkIGFzIHRoZSBrZXkgaW4gdGhlIHJldHVybmVkIGFuc3dlcnMgb2JqZWN0LlxuICAgKiBAcGFyYW0gcXVlc3Rpb24gLSBUaGUgbWVzc2FnZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuXG4gICAqIEBwYXJhbSBtaW4gLSBUaGUgbWluaW11bSBhbGxvd2VkIHZhbHVlIChvcHRpb25hbCkuXG4gICAqIEBwYXJhbSBtYXggLSBUaGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlIChvcHRpb25hbCkuXG4gICAqIEBwYXJhbSBpbml0aWFsIC0gVGhlIGluaXRpYWwgdmFsdWUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIChvcHRpb25hbCkuXG4gICAqIEByZXR1cm4gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIG51bWJlciBlbnRlcmVkIGJ5IHRoZSB1c2VyLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGFza051bWJlcihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb246IHN0cmluZyxcbiAgICBtaW4/OiBudW1iZXIsXG4gICAgbWF4PzogbnVtYmVyLFxuICAgIGluaXRpYWw/OiBudW1iZXJcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBsb2cgPSBVc2VySW5wdXQubG9nZ2VyLmZvcih0aGlzLmFza051bWJlcik7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgQXNraW5nIG51bWJlciBpbnB1dDogdW5kZWZpbmVkLCBxdWVzdGlvbjogJHtxdWVzdGlvbn0sIG1pbjogJHttaW59LCBtYXg6ICR7bWF4fSwgaW5pdGlhbDogJHtpbml0aWFsfWBcbiAgICApO1xuICAgIGNvbnN0IHVzZXJJbnB1dCA9IG5ldyBVc2VySW5wdXQobmFtZSlcbiAgICAgIC5zZXRNZXNzYWdlKHF1ZXN0aW9uKVxuICAgICAgLnNldFR5cGUoXCJudW1iZXJcIik7XG5cbiAgICBpZiAodHlwZW9mIG1pbiA9PT0gXCJudW1iZXJcIikgdXNlcklucHV0LnNldE1pbihtaW4pO1xuXG4gICAgaWYgKHR5cGVvZiBtYXggPT09IFwibnVtYmVyXCIpIHVzZXJJbnB1dC5zZXRNYXgobWF4KTtcblxuICAgIGlmICh0eXBlb2YgaW5pdGlhbCA9PT0gXCJudW1iZXJcIikgdXNlcklucHV0LnNldEluaXRpYWwoaW5pdGlhbCk7XG5cbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuYXNrKHVzZXJJbnB1dCkpW25hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBc2tzIHRoZSB1c2VyIGZvciBhIHRleHQgaW5wdXQuXG4gICAqIEBzdW1tYXJ5IFByb21wdHMgdGhlIHVzZXIgdG8gZW50ZXIgdGV4dCwgd2l0aCBvcHRpb25hbCBtYXNraW5nIGFuZCBpbml0aWFsIHZhbHVlLlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9tcHQsIHVzZWQgYXMgdGhlIGtleSBpbiB0aGUgcmV0dXJuZWQgYW5zd2VycyBvYmplY3QuXG4gICAqIEBwYXJhbSBxdWVzdGlvbiAtIFRoZSBtZXNzYWdlIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICogQHBhcmFtIG1hc2sgLSBUaGUgY2hhcmFjdGVyIHVzZWQgdG8gbWFzayB0aGUgaW5wdXQgKG9wdGlvbmFsLCBmb3IgcGFzc3dvcmQtbGlrZSBpbnB1dHMpLlxuICAgKiBAcGFyYW0gaW5pdGlhbCAtIFRoZSBpbml0aWFsIHZhbHVlIHByZXNlbnRlZCB0byB0aGUgdXNlciAob3B0aW9uYWwpLlxuICAgKiBAcmV0dXJuIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSB0ZXh0IGVudGVyZWQgYnkgdGhlIHVzZXIuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgYXNrVGV4dChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb246IHN0cmluZyxcbiAgICBtYXNrOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gICAgaW5pdGlhbD86IHN0cmluZ1xuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGxvZyA9IFVzZXJJbnB1dC5sb2dnZXIuZm9yKHRoaXMuYXNrVGV4dCk7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgQXNraW5nIHRleHQgaW5wdXQ6IHVuZGVmaW5lZCwgcXVlc3Rpb246ICR7cXVlc3Rpb259LCBtYXNrOiAke21hc2t9LCBpbml0aWFsOiAke2luaXRpYWx9YFxuICAgICk7XG4gICAgY29uc3QgdXNlcklucHV0ID0gbmV3IFVzZXJJbnB1dChuYW1lKS5zZXRNZXNzYWdlKHF1ZXN0aW9uKTtcblxuICAgIGlmIChtYXNrKSB1c2VySW5wdXQuc2V0TWFzayhtYXNrKTtcbiAgICBpZiAodHlwZW9mIGluaXRpYWwgPT09IFwic3RyaW5nXCIpIHVzZXJJbnB1dC5zZXRJbml0aWFsKGluaXRpYWwpO1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5hc2sodXNlcklucHV0KSlbbmFtZV07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFza3MgdGhlIHVzZXIgZm9yIGEgY29uZmlybWF0aW9uICh5ZXMvbm8pLlxuICAgKiBAc3VtbWFyeSBQcm9tcHRzIHRoZSB1c2VyIHdpdGggYSB5ZXMvbm8gcXVlc3Rpb24gYW5kIHJldHVybnMgYSBib29sZWFuIHJlc3VsdC5cbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvbXB0LCB1c2VkIGFzIHRoZSBrZXkgaW4gdGhlIHJldHVybmVkIGFuc3dlcnMgb2JqZWN0LlxuICAgKiBAcGFyYW0gcXVlc3Rpb24gLSBUaGUgbWVzc2FnZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuXG4gICAqIEBwYXJhbSBpbml0aWFsIC0gVGhlIGluaXRpYWwgdmFsdWUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIChvcHRpb25hbCkuXG4gICAqIEByZXR1cm4gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgdXNlcidzIGFuc3dlci5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBhc2tDb25maXJtYXRpb24oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHF1ZXN0aW9uOiBzdHJpbmcsXG4gICAgaW5pdGlhbD86IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbG9nID0gVXNlcklucHV0LmxvZ2dlci5mb3IodGhpcy5hc2tDb25maXJtYXRpb24pO1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYEFza2luZyBjb25maXJtYXRpb24gaW5wdXQ6IHVuZGVmaW5lZCwgcXVlc3Rpb246ICR7cXVlc3Rpb259LCBpbml0aWFsOiAke2luaXRpYWx9YFxuICAgICk7XG4gICAgY29uc3QgdXNlcklucHV0ID0gbmV3IFVzZXJJbnB1dChuYW1lKVxuICAgICAgLnNldE1lc3NhZ2UocXVlc3Rpb24pXG4gICAgICAuc2V0VHlwZShcImNvbmZpcm1cIik7XG5cbiAgICBpZiAodHlwZW9mIGluaXRpYWwgIT09IFwidW5kZWZpbmVkXCIpIHVzZXJJbnB1dC5zZXRJbml0aWFsKGluaXRpYWwpO1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5hc2sodXNlcklucHV0KSlbbmFtZV07XG4gIH1cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXBlYXRlZGx5IGFza3MgZm9yIGlucHV0IHVudGlsIGEgdmFsaWQgcmVzcG9uc2UgaXMgZ2l2ZW4gb3IgdGhlIGxpbWl0IGlzIHJlYWNoZWQuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIGluc2lzdHMgb24gZ2V0dGluZyBhIHZhbGlkIGlucHV0IGZyb20gdGhlIHVzZXIsIGFsbG93aW5nIGZvciBhIHNwZWNpZmllZCBudW1iZXIgb2YgYXR0ZW1wdHMuXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHR5cGUgb2YgdGhlIGV4cGVjdGVkIHJlc3VsdC5cbiAgICogQHBhcmFtIGlucHV0IC0gVGhlIFVzZXJJbnB1dCBpbnN0YW5jZSB0byB1c2UgZm9yIHByb21wdGluZy5cbiAgICogQHBhcmFtIHRlc3QgLSBBIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSB1c2VyJ3MgaW5wdXQuXG4gICAqIEBwYXJhbSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRlbXB0cyBhbGxvd2VkIChkZWZhdWx0IGlzIDEpLlxuICAgKiBAcGFyYW0gZGVmYXVsdENvbmZpcm1hdGlvblxuICAgKiBAcmV0dXJuIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSB2YWxpZCBpbnB1dCBvciB1bmRlZmluZWQgaWYgdGhlIGxpbWl0IGlzIHJlYWNoZWQuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IEkgYXMgaW5zaXN0IG1ldGhvZFxuICAgKiAgIHBhcnRpY2lwYW50IEEgYXMgYXNrIG1ldGhvZFxuICAgKiAgIHBhcnRpY2lwYW50IFQgYXMgdGVzdCBmdW5jdGlvblxuICAgKiAgIHBhcnRpY2lwYW50IEMgYXMgYXNrQ29uZmlybWF0aW9uIG1ldGhvZFxuICAgKiAgIGxvb3AgVW50aWwgdmFsaWQgaW5wdXQgb3IgbGltaXQgcmVhY2hlZFxuICAgKiAgICAgSS0+PkE6IENhbGwgYXNrIHdpdGggaW5wdXRcbiAgICogICAgIEEtPj5VOiBQcm9tcHQgdXNlclxuICAgKiAgICAgVS0+PkE6IFByb3ZpZGUgaW5wdXRcbiAgICogICAgIEEtPj5JOiBSZXR1cm4gcmVzdWx0XG4gICAqICAgICBJLT4+VDogVGVzdCByZXN1bHRcbiAgICogICAgIGFsdCBUZXN0IHBhc3Nlc1xuICAgKiAgICAgICBJLT4+QzogQXNrIGZvciBjb25maXJtYXRpb25cbiAgICogICAgICAgQy0+PlU6IENvbmZpcm0gaW5wdXRcbiAgICogICAgICAgVS0+PkM6IFByb3ZpZGUgY29uZmlybWF0aW9uXG4gICAqICAgICAgIEMtPj5JOiBSZXR1cm4gY29uZmlybWF0aW9uXG4gICAqICAgICAgIGFsdCBDb25maXJtZWRcbiAgICogICAgICAgICBJLS0+PkNhbGxlcjogUmV0dXJuIHZhbGlkIHJlc3VsdFxuICAgKiAgICAgICBlbHNlIE5vdCBjb25maXJtZWRcbiAgICogICAgICAgICBJLT4+STogQ29udGludWUgbG9vcFxuICAgKiAgICAgICBlbmRcbiAgICogICAgIGVsc2UgVGVzdCBmYWlsc1xuICAgKiAgICAgICBJLT4+STogQ29udGludWUgbG9vcFxuICAgKiAgICAgZW5kXG4gICAqICAgZW5kXG4gICAqICAgSS0tPj5DYWxsZXI6IFJldHVybiB1bmRlZmluZWQgaWYgbGltaXQgcmVhY2hlZFxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGluc2lzdDxSPihcbiAgICBpbnB1dDogVXNlcklucHV0LFxuICAgIHRlc3Q6IChyZXM6IHN0cmluZyB8IG51bWJlcikgPT4gYm9vbGVhbixcbiAgICBkZWZhdWx0Q29uZmlybWF0aW9uOiBib29sZWFuLFxuICAgIGxpbWl0ID0gMVxuICApOiBQcm9taXNlPFIgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBsb2cgPSBVc2VySW5wdXQubG9nZ2VyLmZvcih0aGlzLmluc2lzdCk7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgSW5zaXN0aW5nIG9uIGlucHV0OiAke2lucHV0Lm5hbWV9LCB0ZXN0OiAke3Rlc3QudG9TdHJpbmcoKX0sIGRlZmF1bHRDb25maXJtYXRpb246ICR7ZGVmYXVsdENvbmZpcm1hdGlvbn0sIGxpbWl0OiAke2xpbWl0fWBcbiAgICApO1xuICAgIGxldCByZXN1bHQ6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGxldCBjb25maXJtYXRpb246IGJvb2xlYW47XG4gICAgdHJ5IHtcbiAgICAgIGRvIHtcbiAgICAgICAgcmVzdWx0ID0gKGF3YWl0IFVzZXJJbnB1dC5hc2soaW5wdXQpKVtcbiAgICAgICAgICBpbnB1dC5uYW1lIGFzIGtleW9mIEFuc3dlcnM8c3RyaW5nPlxuICAgICAgICBdIGFzIHN0cmluZztcbiAgICAgICAgaWYgKCF0ZXN0KHJlc3VsdCkpIHtcbiAgICAgICAgICByZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlybWF0aW9uID0gYXdhaXQgVXNlcklucHV0LmFza0NvbmZpcm1hdGlvbihcbiAgICAgICAgICBgJHtpbnB1dC5uYW1lfS1jb25maXJtYCxcbiAgICAgICAgICBgSXMgdGhlICR7aW5wdXQudHlwZX0gY29ycmVjdD9gLFxuICAgICAgICAgIGRlZmF1bHRDb25maXJtYXRpb25cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFjb25maXJtYXRpb24pIHJlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgIH0gd2hpbGUgKHR5cGVvZiByZXN1bHQgPT09IFwidW5kZWZpbmVkXCIgJiYgbGltaXQgPiAxICYmIGNvdW50KysgPCBsaW1pdCk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgbG9nLmVycm9yKGBFcnJvciB3aGlsZSBpbnNpc3Rpbmc6ICR7ZX1gKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT09IFwidW5kZWZpbmVkXCIpIGxvZy5pbmZvKFwibm8gc2VsZWN0aW9uLi4uXCIpO1xuICAgIHJldHVybiByZXN1bHQgYXMgUiB8IHVuZGVmaW5lZDtcbiAgfVxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlcGVhdGVkbHkgYXNrcyBmb3IgdGV4dCBpbnB1dCB1bnRpbCBhIHZhbGlkIHJlc3BvbnNlIGlzIGdpdmVuIG9yIHRoZSBsaW1pdCBpcyByZWFjaGVkLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBpbnNpc3RzIG9uIGdldHRpbmcgYSB2YWxpZCB0ZXh0IGlucHV0IGZyb20gdGhlIHVzZXIsIGFsbG93aW5nIGZvciBhIHNwZWNpZmllZCBudW1iZXIgb2YgYXR0ZW1wdHMuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb21wdCwgdXNlZCBhcyB0aGUga2V5IGluIHRoZSByZXR1cm5lZCBhbnN3ZXJzIG9iamVjdC5cbiAgICogQHBhcmFtIHF1ZXN0aW9uIC0gVGhlIG1lc3NhZ2UgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgKiBAcGFyYW0gdGVzdCAtIEEgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIHVzZXIncyBpbnB1dC5cbiAgICogQHBhcmFtIG1hc2sgLSBUaGUgY2hhcmFjdGVyIHVzZWQgdG8gbWFzayB0aGUgaW5wdXQgKG9wdGlvbmFsLCBmb3IgcGFzc3dvcmQtbGlrZSBpbnB1dHMpLlxuICAgKiBAcGFyYW0gaW5pdGlhbCAtIFRoZSBpbml0aWFsIHZhbHVlIHByZXNlbnRlZCB0byB0aGUgdXNlciAob3B0aW9uYWwpLlxuICAgKiBAcGFyYW0gZGVmYXVsdENvbmZpcm1hdGlvblxuICAgKiBAcGFyYW0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXR0ZW1wdHMgYWxsb3dlZCAoZGVmYXVsdCBpcyAtMSwgbWVhbmluZyB1bmxpbWl0ZWQpLlxuICAgKiBAcmV0dXJuIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSB2YWxpZCBpbnB1dCBvciB1bmRlZmluZWQgaWYgdGhlIGxpbWl0IGlzIHJlYWNoZWQuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgaW5zaXN0Rm9yVGV4dChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb246IHN0cmluZyxcbiAgICB0ZXN0OiAocmVzOiBzdHJpbmcpID0+IGJvb2xlYW4sXG4gICAgbWFzazogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICAgIGluaXRpYWw/OiBzdHJpbmcsXG4gICAgZGVmYXVsdENvbmZpcm1hdGlvbiA9IGZhbHNlLFxuICAgIGxpbWl0ID0gLTFcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBsb2cgPSBVc2VySW5wdXQubG9nZ2VyLmZvcih0aGlzLmluc2lzdEZvclRleHQpO1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYEluc2lzdGluZyBmb3IgdGV4dCBpbnB1dDogdW5kZWZpbmVkLCBxdWVzdGlvbjogJHtxdWVzdGlvbn0sIHRlc3Q6ICR7dGVzdC50b1N0cmluZygpfSwgbWFzazogJHttYXNrfSwgaW5pdGlhbDogJHtpbml0aWFsfSwgZGVmYXVsdENvbmZpcm1hdGlvbjogJHtkZWZhdWx0Q29uZmlybWF0aW9ufSwgbGltaXQ6ICR7bGltaXR9YFxuICAgICk7XG4gICAgY29uc3QgdXNlcklucHV0ID0gbmV3IFVzZXJJbnB1dChuYW1lKS5zZXRNZXNzYWdlKHF1ZXN0aW9uKTtcblxuICAgIGlmIChtYXNrKSB1c2VySW5wdXQuc2V0TWFzayhtYXNrKTtcbiAgICBpZiAodHlwZW9mIGluaXRpYWwgPT09IFwic3RyaW5nXCIpIHVzZXJJbnB1dC5zZXRJbml0aWFsKGluaXRpYWwpO1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5pbnNpc3QoXG4gICAgICB1c2VySW5wdXQsXG4gICAgICB0ZXN0IGFzIChyZXM6IHN0cmluZyB8IG51bWJlcikgPT4gYm9vbGVhbixcbiAgICAgIGRlZmF1bHRDb25maXJtYXRpb24sXG4gICAgICBsaW1pdFxuICAgICkpIGFzIHN0cmluZztcbiAgfVxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlcGVhdGVkbHkgYXNrcyBmb3IgbnVtYmVyIGlucHV0IHVudGlsIGEgdmFsaWQgcmVzcG9uc2UgaXMgZ2l2ZW4gb3IgdGhlIGxpbWl0IGlzIHJlYWNoZWQuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIGluc2lzdHMgb24gZ2V0dGluZyBhIHZhbGlkIG51bWJlciBpbnB1dCBmcm9tIHRoZSB1c2VyLCBhbGxvd2luZyBmb3IgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIGF0dGVtcHRzLlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9tcHQsIHVzZWQgYXMgdGhlIGtleSBpbiB0aGUgcmV0dXJuZWQgYW5zd2VycyBvYmplY3QuXG4gICAqIEBwYXJhbSBxdWVzdGlvbiAtIFRoZSBtZXNzYWdlIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICogQHBhcmFtIHRlc3QgLSBBIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSB1c2VyJ3MgaW5wdXQuXG4gICAqIEBwYXJhbSBtaW4gLSBUaGUgbWluaW11bSBhbGxvd2VkIHZhbHVlIChvcHRpb25hbCkuXG4gICAqIEBwYXJhbSBtYXggLSBUaGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlIChvcHRpb25hbCkuXG4gICAqIEBwYXJhbSBpbml0aWFsIC0gVGhlIGluaXRpYWwgdmFsdWUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIChvcHRpb25hbCkuXG4gICAqIEBwYXJhbSBkZWZhdWx0Q29uZmlybWF0aW9uXG4gICAqIEBwYXJhbSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRlbXB0cyBhbGxvd2VkIChkZWZhdWx0IGlzIC0xLCBtZWFuaW5nIHVubGltaXRlZCkuXG4gICAqIEByZXR1cm4gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHZhbGlkIGlucHV0IG9yIHVuZGVmaW5lZCBpZiB0aGUgbGltaXQgaXMgcmVhY2hlZC5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBpbnNpc3RGb3JOdW1iZXIoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHF1ZXN0aW9uOiBzdHJpbmcsXG4gICAgdGVzdDogKHJlczogbnVtYmVyKSA9PiBib29sZWFuLFxuICAgIG1pbj86IG51bWJlcixcbiAgICBtYXg/OiBudW1iZXIsXG4gICAgaW5pdGlhbD86IG51bWJlcixcbiAgICBkZWZhdWx0Q29uZmlybWF0aW9uID0gZmFsc2UsXG4gICAgbGltaXQgPSAtMVxuICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IGxvZyA9IFVzZXJJbnB1dC5sb2dnZXIuZm9yKHRoaXMuaW5zaXN0Rm9yTnVtYmVyKTtcbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBJbnNpc3RpbmcgZm9yIG51bWJlciBpbnB1dDogdW5kZWZpbmVkLCBxdWVzdGlvbjogJHtxdWVzdGlvbn0sIHRlc3Q6ICR7dGVzdC50b1N0cmluZygpfSwgbWluOiAke21pbn0sIG1heDogJHttYXh9LCBpbml0aWFsOiAke2luaXRpYWx9LCBkZWZhdWx0Q29uZmlybWF0aW9uOiAke2RlZmF1bHRDb25maXJtYXRpb259LCBsaW1pdDogJHtsaW1pdH1gXG4gICAgKTtcbiAgICBjb25zdCB1c2VySW5wdXQgPSBuZXcgVXNlcklucHV0KG5hbWUpXG4gICAgICAuc2V0TWVzc2FnZShxdWVzdGlvbilcbiAgICAgIC5zZXRUeXBlKFwibnVtYmVyXCIpO1xuXG4gICAgaWYgKHR5cGVvZiBtaW4gPT09IFwibnVtYmVyXCIpIHVzZXJJbnB1dC5zZXRNaW4obWluKTtcblxuICAgIGlmICh0eXBlb2YgbWF4ID09PSBcIm51bWJlclwiKSB1c2VySW5wdXQuc2V0TWF4KG1heCk7XG5cbiAgICBpZiAodHlwZW9mIGluaXRpYWwgPT09IFwibnVtYmVyXCIpIHVzZXJJbnB1dC5zZXRJbml0aWFsKGluaXRpYWwpO1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5pbnNpc3QoXG4gICAgICB1c2VySW5wdXQsXG4gICAgICB0ZXN0IGFzIChyZXM6IHN0cmluZyB8IG51bWJlcikgPT4gYm9vbGVhbixcbiAgICAgIGRlZmF1bHRDb25maXJtYXRpb24sXG4gICAgICBsaW1pdFxuICAgICkpIGFzIG51bWJlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUGFyc2VzIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIG9wdGlvbnMuXG4gICAqIEBzdW1tYXJ5IFVzZXMgTm9kZS5qcydzIHV0aWwucGFyc2VBcmdzIHRvIHBhcnNlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgYW5kIHJldHVybiB0aGUgcmVzdWx0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgcGFyc2luZyBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHBhcnNlZCBhcmd1bWVudHMuXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEMgYXMgQ2FsbGVyXG4gICAqICAgcGFydGljaXBhbnQgUCBhcyBwYXJzZUFyZ3MgbWV0aG9kXG4gICAqICAgcGFydGljaXBhbnQgVSBhcyB1dGlsLnBhcnNlQXJnc1xuICAgKiAgIEMtPj5QOiBDYWxsIHdpdGggb3B0aW9uc1xuICAgKiAgIFAtPj5QOiBQcmVwYXJlIGFyZ3Mgb2JqZWN0XG4gICAqICAgUC0+PlU6IENhbGwgcGFyc2VBcmdzIHdpdGggcHJlcGFyZWQgYXJnc1xuICAgKiAgIFUtPj5QOiBSZXR1cm4gcGFyc2VkIHJlc3VsdFxuICAgKiAgIFAtLT4+QzogUmV0dXJuIFBhcnNlQXJnc1Jlc3VsdFxuICAgKi9cbiAgc3RhdGljIHBhcnNlQXJncyhvcHRpb25zOiBQYXJzZUFyZ3NPcHRpb25zQ29uZmlnKTogUGFyc2VBcmdzUmVzdWx0IHtcbiAgICBjb25zdCBsb2cgPSBVc2VySW5wdXQubG9nZ2VyLmZvcih0aGlzLnBhcnNlQXJncyk7XG4gICAgY29uc3QgYXJnczogUGFyc2VBcmdzQ29uZmlnID0ge1xuICAgICAgYXJnczogcHJvY2Vzcy5hcmd2LnNsaWNlKDIpLFxuICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICB9O1xuICAgIGxvZy5kZWJ1ZyhgUGFyc2luZyBhcmd1bWVudHM6ICR7SlNPTi5zdHJpbmdpZnkoYXJncywgbnVsbCwgMil9YCk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwYXJzZUFyZ3MoYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGxvZy5kZWJ1ZyhcbiAgICAgICAgYEVycm9yIHdoaWxlIHBhcnNpbmcgYXJndW1lbnRzOlxcbiR7SlNPTi5zdHJpbmdpZnkoYXJncywgbnVsbCwgMil9XFxuIHwgb3B0aW9uc1xcbiR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucywgbnVsbCwgMil9XFxuIHwgJHtlcnJvcn1gXG4gICAgICApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciB3aGlsZSBwYXJzaW5nIGFyZ3VtZW50czogJHtlcnJvcn1gKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8qKlxuICogQGRlc2NyaXB0aW9uIERlZmF1bHQgY29tbWFuZCBvcHRpb25zIGZvciBDTEkgY29tbWFuZHMuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgYW5kIGRlZmF1bHQgdmFsdWVzIGZvciBjb21tb24gY29tbWFuZC1saW5lIG9wdGlvbnMgdXNlZCBhY3Jvc3MgdmFyaW91cyBDTEkgY29tbWFuZHMuXG4gKiBAY29uc3QgRGVmYXVsdENvbW1hbmRPcHRpb25zXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEZWZhdWx0Q29tbWFuZE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB2ZXJib3NlIC0gVmVyYm9zaXR5IGxldmVsIG9wdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2ZXJib3NlLnR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgdmVyYm9zZSBvcHRpb24gKG51bWJlcikuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmVyYm9zZS5zaG9ydCAtIFRoZSBzaG9ydCBmbGFnIGZvciB0aGUgdmVyYm9zZSBvcHRpb24gKFYpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHZlcmJvc2UuZGVmYXVsdCAtIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB2ZXJib3NpdHkgKDApLlxuICogQHByb3BlcnR5IHtPYmplY3R9IHZlcnNpb24gLSBWZXJzaW9uIGRpc3BsYXkgb3B0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZlcnNpb24udHlwZSAtIFRoZSB0eXBlIG9mIHRoZSB2ZXJzaW9uIG9wdGlvbiAoYm9vbGVhbikuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmVyc2lvbi5zaG9ydCAtIFRoZSBzaG9ydCBmbGFnIGZvciB0aGUgdmVyc2lvbiBvcHRpb24gKHYpLlxuICogQHByb3BlcnR5IHt1bmRlZmluZWR9IHZlcnNpb24uZGVmYXVsdCAtIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB2ZXJzaW9uIGRpc3BsYXkgKHVuZGVmaW5lZCkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gaGVscCAtIEhlbHAgZGlzcGxheSBvcHRpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaGVscC50eXBlIC0gVGhlIHR5cGUgb2YgdGhlIGhlbHAgb3B0aW9uIChib29sZWFuKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBoZWxwLnNob3J0IC0gVGhlIHNob3J0IGZsYWcgZm9yIHRoZSBoZWxwIG9wdGlvbiAoaCkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGhlbHAuZGVmYXVsdCAtIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBoZWxwIGRpc3BsYXkgKGZhbHNlKS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsb2dMZXZlbCAtIExvZyBsZXZlbCBvcHRpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbG9nTGV2ZWwudHlwZSAtIFRoZSB0eXBlIG9mIHRoZSBsb2dMZXZlbCBvcHRpb24gKHN0cmluZykuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbG9nTGV2ZWwuZGVmYXVsdCAtIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBsb2cgbGV2ZWwgKFwiaW5mb1wiKS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsb2dTdHlsZSAtIExvZyBzdHlsaW5nIG9wdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsb2dTdHlsZS50eXBlIC0gVGhlIHR5cGUgb2YgdGhlIGxvZ1N0eWxlIG9wdGlvbiAoYm9vbGVhbikuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGxvZ1N0eWxlLmRlZmF1bHQgLSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgbG9nIHN0eWxpbmcgKHRydWUpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IHRpbWVzdGFtcCAtIFRpbWVzdGFtcCBkaXNwbGF5IG9wdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0aW1lc3RhbXAudHlwZSAtIFRoZSB0eXBlIG9mIHRoZSB0aW1lc3RhbXAgb3B0aW9uIChib29sZWFuKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdGltZXN0YW1wLmRlZmF1bHQgLSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGltZXN0YW1wIGRpc3BsYXkgKHRydWUpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGJhbm5lciAtIEJhbm5lciBkaXNwbGF5IG9wdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBiYW5uZXIudHlwZSAtIFRoZSB0eXBlIG9mIHRoZSBiYW5uZXIgb3B0aW9uIChib29sZWFuKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYmFubmVyLmRlZmF1bHQgLSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgYmFubmVyIGRpc3BsYXkgKGZhbHNlKS5cbiAqL1xuZXhwb3J0IGNvbnN0IERlZmF1bHRDb21tYW5kT3B0aW9ucyA9IHtcbiAgdmVyYm9zZToge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIHNob3J0OiBcIlZcIixcbiAgICBkZWZhdWx0OiB1bmRlZmluZWQsXG4gIH0sXG4gIHZlcnNpb246IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBzaG9ydDogXCJ2XCIsXG4gICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICB9LFxuICBoZWxwOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgc2hvcnQ6IFwiaFwiLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBsb2dMZXZlbDoge1xuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgZGVmYXVsdDogXCJpbmZvXCIsXG4gIH0sXG4gIGxvZ1N0eWxlOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgfSxcbiAgdGltZXN0YW1wOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgfSxcbiAgYmFubmVyOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgfSxcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlZmF1bHQgY29tbWFuZCB2YWx1ZXMgZGVyaXZlZCBmcm9tIERlZmF1bHRDb21tYW5kT3B0aW9ucy5cbiAqIEBzdW1tYXJ5IENyZWF0ZXMgYW4gb2JqZWN0IHdpdGggdGhlIGRlZmF1bHQgdmFsdWVzIG9mIGFsbCBvcHRpb25zIGRlZmluZWQgaW4gRGVmYXVsdENvbW1hbmRPcHRpb25zLlxuICogQGNvbnN0IERlZmF1bHRDb21tYW5kVmFsdWVzXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEZWZhdWx0Q29tbWFuZFZhbHVlc1xuICogQHByb3BlcnR5IHt1bmtub3dufSBba2V5OiBzdHJpbmddIC0gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGVhY2ggb3B0aW9uIGluIERlZmF1bHRDb21tYW5kT3B0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IERlZmF1bHRDb21tYW5kVmFsdWVzOiB7XG4gIFtrIGluIGtleW9mIHR5cGVvZiBEZWZhdWx0Q29tbWFuZE9wdGlvbnNdOiB1bmtub3duO1xufSA9IE9iamVjdC5rZXlzKERlZmF1bHRDb21tYW5kT3B0aW9ucykucmVkdWNlKFxuICAoYWNjOiBSZWNvcmQ8a2V5b2YgdHlwZW9mIERlZmF1bHRDb21tYW5kT3B0aW9ucywgdW5rbm93bj4sIGtleTogc3RyaW5nKSA9PiB7XG4gICAgYWNjW2tleSBhcyBrZXlvZiB0eXBlb2YgRGVmYXVsdENvbW1hbmRPcHRpb25zXSA9XG4gICAgICBEZWZhdWx0Q29tbWFuZE9wdGlvbnNba2V5IGFzIGtleW9mIHR5cGVvZiBEZWZhdWx0Q29tbWFuZE9wdGlvbnNdLmRlZmF1bHQ7XG4gICAgcmV0dXJuIGFjYztcbiAgfSxcbiAge30gYXMgUmVjb3JkPGtleW9mIHR5cGVvZiBEZWZhdWx0Q29tbWFuZFZhbHVlcywgdW5rbm93bj5cbik7XG4iLCIvKipcbiAqIEBkZXNjcmlwdGlvbiBQYWRzIHRoZSBlbmQgb2YgYSBzdHJpbmcgd2l0aCBhIHNwZWNpZmllZCBjaGFyYWN0ZXIuXG4gKiBAc3VtbWFyeSBFeHRlbmRzIHRoZSBpbnB1dCBzdHJpbmcgdG8gYSBzcGVjaWZpZWQgbGVuZ3RoIGJ5IGFkZGluZyBhIHBhZGRpbmcgY2hhcmFjdGVyIHRvIHRoZSBlbmQuXG4gKiBJZiB0aGUgaW5wdXQgc3RyaW5nIGlzIGFscmVhZHkgbG9uZ2VyIHRoYW4gdGhlIHNwZWNpZmllZCBsZW5ndGgsIGl0IGlzIHJldHVybmVkIHVuY2hhbmdlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIGlucHV0IHN0cmluZyB0byBiZSBwYWRkZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoIC0gVGhlIGRlc2lyZWQgdG90YWwgbGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgc3RyaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjaGFyPVwiIFwiXSAtIFRoZSBjaGFyYWN0ZXIgdG8gdXNlIGZvciBwYWRkaW5nLiBEZWZhdWx0cyB0byBhIHNwYWNlLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgcGFkZGVkIHN0cmluZy5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGFkZGluZyBjaGFyYWN0ZXIgaXMgbm90IGV4YWN0bHkgb25lIGNoYXJhY3RlciBsb25nLlxuICpcbiAqIEBmdW5jdGlvbiBwYWRFbmRcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOlRleHRVdGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFkRW5kKFxuICBzdHI6IHN0cmluZyxcbiAgbGVuZ3RoOiBudW1iZXIsXG4gIGNoYXI6IHN0cmluZyA9IFwiIFwiXG4pOiBzdHJpbmcge1xuICBpZiAoY2hhci5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBjaGFyYWN0ZXIgbGVuZ3RoIGZvciBwYWRkaW5nLiBtdXN0IGJlIG9uZSFcIik7XG4gIHJldHVybiBzdHIucGFkRW5kKGxlbmd0aCwgY2hhcik7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJlcGxhY2VzIHBsYWNlaG9sZGVycyBpbiBhIHN0cmluZyB3aXRoIHByb3ZpZGVkIHZhbHVlcy5cbiAqIEBzdW1tYXJ5IEludGVycG9sYXRlcyBhIHN0cmluZyBieSByZXBsYWNpbmcgcGxhY2Vob2xkZXJzIG9mIHRoZSBmb3JtICR7dmFyaWFibGVOYW1lfVxuICogd2l0aCBjb3JyZXNwb25kaW5nIHZhbHVlcyBmcm9tIHRoZSBwcm92aWRlZCBvYmplY3QuIElmIGEgcGxhY2Vob2xkZXIgZG9lc24ndCBoYXZlXG4gKiBhIGNvcnJlc3BvbmRpbmcgdmFsdWUsIGl0IGlzIGxlZnQgdW5jaGFuZ2VkIGluIHRoZSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0IC0gVGhlIGlucHV0IHN0cmluZyBjb250YWluaW5nIHBsYWNlaG9sZGVycyB0byBiZSByZXBsYWNlZC5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nPn0gdmFsdWVzIC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcga2V5LXZhbHVlIHBhaXJzIGZvciByZXBsYWNlbWVudC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGludGVycG9sYXRlZCBzdHJpbmcgd2l0aCBwbGFjZWhvbGRlcnMgcmVwbGFjZWQgYnkgdGhlaXIgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gKlxuICogQGZ1bmN0aW9uIHBhdGNoUGxhY2Vob2xkZXJzXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAqICAgcGFydGljaXBhbnQgcGF0Y2hTdHJpbmdcbiAqICAgcGFydGljaXBhbnQgU3RyaW5nLnJlcGxhY2VcbiAqICAgQ2FsbGVyLT4+cGF0Y2hTdHJpbmc6IENhbGwgd2l0aCBpbnB1dCBhbmQgdmFsdWVzXG4gKiAgIHBhdGNoU3RyaW5nLT4+U3RyaW5nLnJlcGxhY2U6IENhbGwgd2l0aCByZWdleCBhbmQgcmVwbGFjZW1lbnQgZnVuY3Rpb25cbiAqICAgU3RyaW5nLnJlcGxhY2UtPj5wYXRjaFN0cmluZzogUmV0dXJuIHJlcGxhY2VkIHN0cmluZ1xuICogICBwYXRjaFN0cmluZy0tPj5DYWxsZXI6IFJldHVybiBwYXRjaGVkIHN0cmluZ1xuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6VGV4dFV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaFBsYWNlaG9sZGVycyhcbiAgaW5wdXQ6IHN0cmluZyxcbiAgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+XG4pOiBzdHJpbmcge1xuICByZXR1cm4gaW5wdXQucmVwbGFjZShcbiAgICAvXFwkXFx7KFthLXpBLVowLTlfXSspXFx9L2csXG4gICAgKG1hdGNoLCB2YXJpYWJsZSkgPT4gKHZhbHVlc1t2YXJpYWJsZSBhcyBzdHJpbmddIGFzIHN0cmluZykgfHwgbWF0Y2hcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoU3RyaW5nKFxuICBpbnB1dDogc3RyaW5nLFxuICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz4sXG4gIGZsYWdzOiBzdHJpbmcgPSBcImdcIlxuKTogc3RyaW5nIHtcbiAgT2JqZWN0LmVudHJpZXModmFsdWVzKS5mb3JFYWNoKChba2V5LCB2YWxdKSA9PiB7XG4gICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeHAoa2V5KSwgZmxhZ3MpO1xuICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZShyZWdleHAsIHZhbCBhcyBzdHJpbmcpO1xuICB9KTtcbiAgcmV0dXJuIGlucHV0O1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyBhIHN0cmluZyB0byBjYW1lbENhc2UuXG4gKiBAc3VtbWFyeSBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBzdHJpbmcgaW50byBjYW1lbENhc2UgZm9ybWF0LCB3aGVyZSB3b3JkcyBhcmUgam9pbmVkIHdpdGhvdXQgc3BhY2VzXG4gKiBhbmQgZWFjaCB3b3JkIGFmdGVyIHRoZSBmaXJzdCBzdGFydHMgd2l0aCBhIGNhcGl0YWwgbGV0dGVyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIGlucHV0IHN0cmluZyB0byBiZSBjb252ZXJ0ZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBpbnB1dCBzdHJpbmcgY29udmVydGVkIHRvIGNhbWVsQ2FzZS5cbiAqXG4gKiBAZnVuY3Rpb24gdG9DYW1lbENhc2VcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOlRleHRVdGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9DYW1lbENhc2UodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHRcbiAgICAucmVwbGFjZSgvKD86Xlxcd3xbQS1aXXxcXGJcXHcpL2csICh3b3JkLCBpbmRleCkgPT5cbiAgICAgIGluZGV4ID09PSAwID8gd29yZC50b0xvd2VyQ2FzZSgpIDogd29yZC50b1VwcGVyQ2FzZSgpXG4gICAgKVxuICAgIC5yZXBsYWNlKC9cXHMrL2csIFwiXCIpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyBhIHN0cmluZyB0byBFTlZJUk9OTUVOVF9WQVJJQUJMRSBmb3JtYXQuXG4gKiBAc3VtbWFyeSBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBzdHJpbmcgaW50byB1cHBlcmNhc2Ugd2l0aCB3b3JkcyBzZXBhcmF0ZWQgYnkgdW5kZXJzY29yZXMsXG4gKiB0eXBpY2FsbHkgdXNlZCBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgaW5wdXQgc3RyaW5nIHRvIGJlIGNvbnZlcnRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGlucHV0IHN0cmluZyBjb252ZXJ0ZWQgdG8gRU5WSVJPTk1FTlRfVkFSSUFCTEUgZm9ybWF0LlxuICpcbiAqIEBmdW5jdGlvbiB0b0VOVkZvcm1hdFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6VGV4dFV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0VOVkZvcm1hdCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9TbmFrZUNhc2UodGV4dCkudG9VcHBlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29udmVydHMgYSBzdHJpbmcgdG8gc25ha2VfY2FzZS5cbiAqIEBzdW1tYXJ5IFRyYW5zZm9ybXMgdGhlIGlucHV0IHN0cmluZyBpbnRvIGxvd2VyY2FzZSB3aXRoIHdvcmRzIHNlcGFyYXRlZCBieSB1bmRlcnNjb3Jlcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgY29udmVydGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgaW5wdXQgc3RyaW5nIGNvbnZlcnRlZCB0byBzbmFrZV9jYXNlLlxuICpcbiAqIEBmdW5jdGlvbiB0b1NuYWtlQ2FzZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6VGV4dFV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1NuYWtlQ2FzZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dFxuICAgIC5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCBcIiQxXyQyXCIpXG4gICAgLnJlcGxhY2UoL1tcXHMtXSsvZywgXCJfXCIpXG4gICAgLnRvTG93ZXJDYXNlKCk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgc3RyaW5nIHRvIGtlYmFiLWNhc2UuXG4gKiBAc3VtbWFyeSBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBzdHJpbmcgaW50byBsb3dlcmNhc2Ugd2l0aCB3b3JkcyBzZXBhcmF0ZWQgYnkgaHlwaGVucy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgY29udmVydGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgaW5wdXQgc3RyaW5nIGNvbnZlcnRlZCB0byBrZWJhYi1jYXNlLlxuICpcbiAqIEBmdW5jdGlvbiB0b0tlYmFiQ2FzZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6VGV4dFV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0tlYmFiQ2FzZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dFxuICAgIC5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCBcIiQxLSQyXCIpXG4gICAgLnJlcGxhY2UoL1tcXHNfXSsvZywgXCItXCIpXG4gICAgLnRvTG93ZXJDYXNlKCk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgc3RyaW5nIHRvIFBhc2NhbENhc2UuXG4gKiBAc3VtbWFyeSBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBzdHJpbmcgaW50byBQYXNjYWxDYXNlIGZvcm1hdCwgd2hlcmUgd29yZHMgYXJlIGpvaW5lZCB3aXRob3V0IHNwYWNlc1xuICogYW5kIGVhY2ggd29yZCBzdGFydHMgd2l0aCBhIGNhcGl0YWwgbGV0dGVyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIGlucHV0IHN0cmluZyB0byBiZSBjb252ZXJ0ZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBpbnB1dCBzdHJpbmcgY29udmVydGVkIHRvIFBhc2NhbENhc2UuXG4gKlxuICogQGZ1bmN0aW9uIHRvUGFzY2FsQ2FzZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6VGV4dFV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1Bhc2NhbENhc2UodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHRcbiAgICAucmVwbGFjZSgvKD86Xlxcd3xbQS1aXXxcXGJcXHcpL2csICh3b3JkKSA9PiB3b3JkLnRvVXBwZXJDYXNlKCkpXG4gICAgLnJlcGxhY2UoL1xccysvZywgXCJcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVSZWdFeHAoc3RyaW5nOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgXCJcXFxcJCZcIik7IC8vICQmIG1lYW5zIHRoZSB3aG9sZSBtYXRjaGVkIHN0cmluZ1xufVxuIiwiLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVmYXVsdCBlbmNvZGluZyBmb3IgdGV4dCBvcGVyYXRpb25zLlxuICogQHN1bW1hcnkgVGhlIHN0YW5kYXJkIFVURi04IGVuY29kaW5nIHVzZWQgZm9yIHRleHQgcHJvY2Vzc2luZy5cbiAqIEBjb25zdCB7c3RyaW5nfSBFbmNvZGluZ1xuICogQG1lbWJlck9mIEBkZWNhZi10cy91dGlsc1xuICovXG5leHBvcnQgY29uc3QgRW5jb2RpbmcgPSBcInV0Zi04XCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJlZ3VsYXIgZXhwcmVzc2lvbiBmb3Igc2VtYW50aWMgdmVyc2lvbmluZy5cbiAqIEBzdW1tYXJ5IEEgcmVnZXggcGF0dGVybiB0byBtYXRjaCBhbmQgcGFyc2Ugc2VtYW50aWMgdmVyc2lvbiBzdHJpbmdzLlxuICogQGNvbnN0IHtSZWdFeHB9IFNlbVZlcnNpb25SZWdleFxuICogQG1lbWJlck9mIEBkZWNhZi10cy91dGlsc1xuICovXG5leHBvcnQgY29uc3QgU2VtVmVyc2lvblJlZ2V4ID1cbiAgL14oXFxkKylcXC4oXFxkKylcXC4oXFxkKykoPzotKFswLTlBLVphLXotXSsoPzpcXC5bMC05QS1aYS16XSkpKS9nO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFbnVtIGZvciBzZW1hbnRpYyB2ZXJzaW9uIGNvbXBvbmVudHMuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSB0aHJlZSBsZXZlbHMgb2Ygc2VtYW50aWMgdmVyc2lvbmluZzogUEFUQ0gsIE1JTk9SLCBhbmQgTUFKT1IuXG4gKiBAZW51bSB7c3RyaW5nfVxuICogQG1lbWJlck9mIEBkZWNhZi10cy91dGlsc1xuICovXG5leHBvcnQgZW51bSBTZW1WZXJzaW9uIHtcbiAgLyoqIFBhdGNoIHZlcnNpb24gZm9yIGJhY2t3YXJkcy1jb21wYXRpYmxlIGJ1ZyBmaXhlcy4gKi9cbiAgUEFUQ0ggPSBcInBhdGNoXCIsXG4gIC8qKiBNaW5vciB2ZXJzaW9uIGZvciBiYWNrd2FyZHMtY29tcGF0aWJsZSBuZXcgZmVhdHVyZXMuICovXG4gIE1JTk9SID0gXCJtaW5vclwiLFxuICAvKiogTWFqb3IgdmVyc2lvbiBmb3IgY2hhbmdlcyB0aGF0IGJyZWFrIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAqL1xuICBNQUpPUiA9IFwibWFqb3JcIixcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRmxhZyB0byBpbmRpY2F0ZSBub24tQ0kgZW52aXJvbm1lbnQuXG4gKiBAc3VtbWFyeSBVc2VkIHRvIHNwZWNpZnkgdGhhdCBhIGNvbW1hbmQgc2hvdWxkIHJ1biBvdXRzaWRlIG9mIGEgQ29udGludW91cyBJbnRlZ3JhdGlvbiBlbnZpcm9ubWVudC5cbiAqIEBjb25zdCB7c3RyaW5nfSBOb0NJRkxhZ1xuICogQG1lbWJlck9mIEBkZWNhZi10cy91dGlsc1xuICovXG5leHBvcnQgY29uc3QgTm9DSUZMYWcgPSBcIi1uby1jaVwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBLZXkgZm9yIHRoZSBzZXR1cCBzY3JpcHQgaW4gcGFja2FnZS5qc29uLlxuICogQHN1bW1hcnkgSWRlbnRpZmllcyB0aGUgc2NyaXB0IHRoYXQgcnVucyBhZnRlciBwYWNrYWdlIGluc3RhbGxhdGlvbi5cbiAqIEBjb25zdCB7c3RyaW5nfSBTZXR1cFNjcmlwdEtleVxuICogQG1lbWJlck9mIEBkZWNhZi10cy91dGlsc1xuICovXG5leHBvcnQgY29uc3QgU2V0dXBTY3JpcHRLZXkgPSBcInBvc3RpbnN0YWxsXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEVudW0gZm9yIHZhcmlvdXMgYXV0aGVudGljYXRpb24gdG9rZW5zLlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgZmlsZSBuYW1lcyBmb3Igc3RvcmluZyBkaWZmZXJlbnQgdHlwZXMgb2YgYXV0aGVudGljYXRpb24gdG9rZW5zLlxuICogQGVudW0ge3N0cmluZ31cbiAqIEBtZW1iZXJPZiBAZGVjYWYtdHMvdXRpbHNcbiAqL1xuZXhwb3J0IGVudW0gVG9rZW5zIHtcbiAgLyoqIEdpdCBhdXRoZW50aWNhdGlvbiB0b2tlbiBmaWxlIG5hbWUuICovXG4gIEdJVCA9IFwiLnRva2VuXCIsXG4gIC8qKiBOUE0gYXV0aGVudGljYXRpb24gdG9rZW4gZmlsZSBuYW1lLiAqL1xuICBOUE0gPSBcIi5ucG10b2tlblwiLFxuICAvKiogRG9ja2VyIGF1dGhlbnRpY2F0aW9uIHRva2VuIGZpbGUgbmFtZS4gKi9cbiAgRE9DS0VSID0gXCIuZG9ja2VydG9rZW5cIixcbiAgLyoqIENvbmZsdWVuY2UgYXV0aGVudGljYXRpb24gdG9rZW4gZmlsZSBuYW1lLiAqL1xuICBDT05GTFVFTkNFID0gXCIuY29uZmx1ZW5jZS10b2tlblwiLFxufVxuXG5leHBvcnQgY29uc3QgQWJvcnRDb2RlID0gXCJBYm9ydGVkXCI7XG4iLCJpbXBvcnQgeyBFbmNvZGluZyB9IGZyb20gXCIuLi91dGlscy9jb25zdGFudHNcIjtcbmltcG9ydCB7IE91dHB1dFdyaXRlciB9IGZyb20gXCIuL091dHB1dFdyaXRlclwiO1xuaW1wb3J0IHsgUHJvbWlzZUV4ZWN1dG9yIH0gZnJvbSBcIi4uL3V0aWxzL3R5cGVzXCI7XG5pbXBvcnQgeyBPdXRwdXRUeXBlIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IHN0eWxlIH0gZnJvbSBcInN0eWxlZC1zdHJpbmctYnVpbGRlclwiO1xuaW1wb3J0IHsgTG9nZ2VyLCBMb2dnaW5nIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEEgc3RhbmRhcmQgb3V0cHV0IHdyaXRlciBmb3IgaGFuZGxpbmcgY29tbWFuZCBleGVjdXRpb24gb3V0cHV0LlxuICogQHN1bW1hcnkgVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBPdXRwdXRXcml0ZXIgaW50ZXJmYWNlIGFuZCBwcm92aWRlcyBtZXRob2RzIGZvclxuICogaGFuZGxpbmcgdmFyaW91cyB0eXBlcyBvZiBvdXRwdXQgZnJvbSBjb21tYW5kIGV4ZWN1dGlvbiwgaW5jbHVkaW5nIHN0YW5kYXJkIG91dHB1dCxcbiAqIGVycm9yIG91dHB1dCwgYW5kIGV4aXQgY29kZXMuIEl0IGFsc28gaW5jbHVkZXMgdXRpbGl0eSBtZXRob2RzIGZvciBwYXJzaW5nIGNvbW1hbmRzXG4gKiBhbmQgcmVzb2x2aW5nIG9yIHJlamVjdGluZyBwcm9taXNlcyBiYXNlZCBvbiBleGVjdXRpb24gcmVzdWx0cy5cbiAqXG4gKiBAdGVtcGxhdGUgUiAtIFRoZSB0eXBlIG9mIHRoZSByZXNvbHZlZCB2YWx1ZSwgZGVmYXVsdGluZyB0byBudW1iZXIuXG4gKlxuICogQHBhcmFtIGxvY2sgLSBBIFByb21pc2VFeGVjdXRvciB0byBjb250cm9sIHRoZSBhc3luY2hyb25vdXMgZmxvdy5cbiAqIEBwYXJhbSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgKHVudXNlZCBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbikuXG4gKlxuICogQGNsYXNzXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGFuZGFyZE91dHB1dFdyaXRlcjxSID0gc3RyaW5nPiBpbXBsZW1lbnRzIE91dHB1dFdyaXRlciB7XG4gIHByb3RlY3RlZCBsb2dnZXI6IExvZ2dlcjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIFN0YW5kYXJkT3V0cHV0V3JpdGVyLlxuICAgKiBAc3VtbWFyeSBDb25zdHJ1Y3RzIHRoZSBTdGFuZGFyZE91dHB1dFdyaXRlciB3aXRoIGEgbG9jayBtZWNoYW5pc20gYW5kIG9wdGlvbmFsIGFyZ3VtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIGNtZFxuICAgKiBAcGFyYW0gbG9jayAtIEEgUHJvbWlzZUV4ZWN1dG9yIHRvIGNvbnRyb2wgdGhlIGFzeW5jaHJvbm91cyBmbG93LlxuICAgKiBAcGFyYW0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIChjdXJyZW50bHkgdW51c2VkKS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjbWQ6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgbG9jazogUHJvbWlzZUV4ZWN1dG9yPFI+LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAuLi5hcmdzOiB1bmtub3duW11cbiAgKSB7XG4gICAgdGhpcy5sb2dnZXIgPSBMb2dnaW5nLmZvcih0aGlzLmNtZCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExvZ3Mgb3V0cHV0IHRvIHRoZSBjb25zb2xlLlxuICAgKiBAc3VtbWFyeSBGb3JtYXRzIGFuZCBsb2dzIHRoZSBnaXZlbiBkYXRhIHdpdGggYSB0aW1lc3RhbXAgYW5kIHR5cGUgaW5kaWNhdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gdHlwZSAtIFRoZSB0eXBlIG9mIG91dHB1dCAoc3Rkb3V0IG9yIHN0ZGVycikuXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGRhdGEgdG8gYmUgbG9nZ2VkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGxvZyh0eXBlOiBPdXRwdXRUeXBlLCBkYXRhOiBzdHJpbmcgfCBCdWZmZXIpIHtcbiAgICBkYXRhID0gQnVmZmVyLmlzQnVmZmVyKGRhdGEpID8gZGF0YS50b1N0cmluZyhFbmNvZGluZykgOiBkYXRhO1xuICAgIGNvbnN0IGxvZyA9IHR5cGUgPT09IFwic3RkZXJyXCIgPyBzdHlsZShkYXRhKS5yZWQudGV4dCA6IGRhdGE7XG4gICAgdGhpcy5sb2dnZXIuaW5mbyhsb2cpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIHN0YW5kYXJkIG91dHB1dCBkYXRhLlxuICAgKiBAc3VtbWFyeSBMb2dzIHRoZSBnaXZlbiBjaHVuayBhcyBzdGFuZGFyZCBvdXRwdXQuXG4gICAqXG4gICAqIEBwYXJhbSBjaHVuayAtIFRoZSBkYXRhIGNodW5rIHRvIGJlIGxvZ2dlZC5cbiAgICovXG4gIGRhdGEoY2h1bms6IGFueSkge1xuICAgIHRoaXMubG9nKFwic3Rkb3V0XCIsIFN0cmluZyhjaHVuaykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIGVycm9yIG91dHB1dCBkYXRhLlxuICAgKiBAc3VtbWFyeSBMb2dzIHRoZSBnaXZlbiBjaHVuayBhcyBlcnJvciBvdXRwdXQuXG4gICAqXG4gICAqIEBwYXJhbSBjaHVuayAtIFRoZSBlcnJvciBkYXRhIGNodW5rIHRvIGJlIGxvZ2dlZC5cbiAgICovXG4gIGVycm9yKGNodW5rOiBhbnkpIHtcbiAgICB0aGlzLmxvZyhcInN0ZGVyclwiLCBTdHJpbmcoY2h1bmspKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBlcnJvciBvYmplY3RzLlxuICAgKiBAc3VtbWFyeSBMb2dzIHRoZSBlcnJvciBtZXNzYWdlIGZyb20gdGhlIGdpdmVuIEVycm9yIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIGVyciAtIFRoZSBFcnJvciBvYmplY3QgdG8gYmUgbG9nZ2VkLlxuICAgKi9cbiAgZXJyb3JzKGVycjogRXJyb3IpIHtcbiAgICB0aGlzLmxvZyhcInN0ZGVyclwiLCBgRXJyb3IgZXhlY3V0aW5nIGNvbW1hbmQgZXhpdGVkIDogJHtlcnJ9YCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgdGhlIGV4aXQgb2YgYSBjb21tYW5kLlxuICAgKiBAc3VtbWFyeSBMb2dzIHRoZSBleGl0IGNvZGUgYW5kIHJlc29sdmVzIG9yIHJlamVjdHMgdGhlIHByb21pc2UgYmFzZWQgb24gdGhlIGNvZGUuXG4gICAqXG4gICAqIEBwYXJhbSBjb2RlIC0gVGhlIGV4aXQgY29kZSBvZiB0aGUgY29tbWFuZC5cbiAgICogQHBhcmFtIGxvZ3NcbiAgICovXG4gIGV4aXQoY29kZTogbnVtYmVyIHwgc3RyaW5nLCBsb2dzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMubG9nKFxuICAgICAgXCJzdGRvdXRcIixcbiAgICAgIGBjb21tYW5kIGV4aXRlZCBjb2RlIDogJHtjb2RlID09PSAwID8gc3R5bGUoY29kZS50b1N0cmluZygpKS5ncmVlbi50ZXh0IDogc3R5bGUoY29kZSA9PT0gbnVsbCA/IFwibnVsbFwiIDogY29kZS50b1N0cmluZygpKS5yZWQudGV4dH1gXG4gICAgKTtcbiAgICBpZiAoY29kZSA9PT0gMCkge1xuICAgICAgdGhpcy5yZXNvbHZlKGxvZ3MubWFwKChsKSA9PiBsLnRyaW0oKSkuam9pbihcIlxcblwiKSBhcyBSKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWplY3QobmV3IEVycm9yKGxvZ3MubGVuZ3RoID8gbG9ncy5qb2luKFwiXFxuXCIpIDogY29kZS50b1N0cmluZygpKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQYXJzZXMgYSBjb21tYW5kIHN0cmluZyBvciBhcnJheSBpbnRvIGNvbXBvbmVudHMuXG4gICAqIEBzdW1tYXJ5IENvbnZlcnRzIHRoZSBjb21tYW5kIGludG8gYSBjb25zaXN0ZW50IGZvcm1hdCBhbmQgc3RvcmVzIGl0LCB0aGVuIHJldHVybnMgaXQgc3BsaXQgaW50byBjb21tYW5kIGFuZCBhcmd1bWVudHMuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgYXMgYSBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncy5cbiAgICogQHJldHVybiBBIHR1cGxlIGNvbnRhaW5pbmcgdGhlIGNvbW1hbmQgYW5kIGl0cyBhcmd1bWVudHMgYXMgc2VwYXJhdGUgZWxlbWVudHMuXG4gICAqL1xuICBwYXJzZUNvbW1hbmQoY29tbWFuZDogc3RyaW5nIHwgc3RyaW5nW10pOiBbc3RyaW5nLCBzdHJpbmdbXV0ge1xuICAgIGNvbW1hbmQgPSB0eXBlb2YgY29tbWFuZCA9PT0gXCJzdHJpbmdcIiA/IGNvbW1hbmQuc3BsaXQoXCIgXCIpIDogY29tbWFuZDtcbiAgICB0aGlzLmNtZCA9IGNvbW1hbmQuam9pbihcIiBcIik7XG4gICAgcmV0dXJuIFtjb21tYW5kWzBdLCBjb21tYW5kLnNsaWNlKDEpXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVzb2x2ZXMgdGhlIHByb21pc2Ugd2l0aCBhIHN1Y2Nlc3MgbWVzc2FnZS5cbiAgICogQHN1bW1hcnkgTG9ncyBhIHN1Y2Nlc3MgbWVzc2FnZSBhbmQgcmVzb2x2ZXMgdGhlIHByb21pc2Ugd2l0aCB0aGUgZ2l2ZW4gcmVhc29uLlxuICAgKlxuICAgKiBAcGFyYW0gcmVhc29uIC0gVGhlIHJlYXNvbiBmb3IgcmVzb2x2aW5nIHRoZSBwcm9taXNlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc29sdmUocmVhc29uOiBSKSB7XG4gICAgdGhpcy5sb2coXG4gICAgICBcInN0ZG91dFwiLFxuICAgICAgYCR7dGhpcy5jbWR9IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseTogJHtzdHlsZShyZWFzb24gPyBcInJhbiB0byBjb21wbGV0aW9uXCIgOiAocmVhc29uIGFzIHN0cmluZykpLmdyZWVufWBcbiAgICApO1xuICAgIHRoaXMubG9jay5yZXNvbHZlKHJlYXNvbik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlamVjdHMgdGhlIHByb21pc2Ugd2l0aCBhbiBlcnJvciBtZXNzYWdlLlxuICAgKiBAc3VtbWFyeSBMb2dzIGFuIGVycm9yIG1lc3NhZ2UgYW5kIHJlamVjdHMgdGhlIHByb21pc2Ugd2l0aCB0aGUgZ2l2ZW4gcmVhc29uLlxuICAgKlxuICAgKiBAcGFyYW0gcmVhc29uIC0gVGhlIHJlYXNvbiBmb3IgcmVqZWN0aW5nIHRoZSBwcm9taXNlLCBlaXRoZXIgYSBudW1iZXIgKGV4aXQgY29kZSkgb3IgYSBzdHJpbmcuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVqZWN0KHJlYXNvbjogbnVtYmVyIHwgc3RyaW5nIHwgRXJyb3IpIHtcbiAgICBpZiAoIShyZWFzb24gaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgIHJlYXNvbiA9IG5ldyBFcnJvcihcbiAgICAgICAgdHlwZW9mIHJlYXNvbiA9PT0gXCJudW1iZXJcIiA/IGBFeGl0IGNvZGUgJHtyZWFzb259YCA6IHJlYXNvblxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5sb2coXG4gICAgICBcInN0ZGVyclwiLFxuICAgICAgYCR7dGhpcy5jbWR9IGZhaWxlZCB0byBleGVjdXRlOiAke3N0eWxlKHJlYXNvbi5tZXNzYWdlKS5yZWR9YFxuICAgICk7XG4gICAgdGhpcy5sb2NrLnJlamVjdChyZWFzb24pO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBDaGlsZFByb2Nlc3NXaXRob3V0TnVsbFN0cmVhbXMsXG4gIHNwYXduLFxuICBTcGF3bk9wdGlvbnNXaXRob3V0U3RkaW8sXG59IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBTdGFuZGFyZE91dHB1dFdyaXRlciB9IGZyb20gXCIuLi93cml0ZXJzL1N0YW5kYXJkT3V0cHV0V3JpdGVyXCI7XG5pbXBvcnQgeyBDb21tYW5kUmVzdWx0IH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IE91dHB1dFdyaXRlckNvbnN0cnVjdG9yIH0gZnJvbSBcIi4uL3dyaXRlcnMvdHlwZXNcIjtcbmltcG9ydCB7IEFib3J0Q29kZSB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgTG9nZ2VyLCBMb2dnaW5nIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBsb2NrZWQgdmVyc2lvbiBvZiBhIGZ1bmN0aW9uLlxuICogQHN1bW1hcnkgVGhpcyBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGFrZXMgYSBmdW5jdGlvbiBhbmQgcmV0dXJucyBhIG5ldyBmdW5jdGlvbiB0aGF0IGVuc3VyZXNcbiAqIHNlcXVlbnRpYWwgZXhlY3V0aW9uIG9mIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiwgZXZlbiB3aGVuIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBjb25jdXJyZW50bHkuXG4gKiBJdCB1c2VzIGEgUHJvbWlzZS1iYXNlZCBsb2NraW5nIG1lY2hhbmlzbSB0byBxdWV1ZSBmdW5jdGlvbiBjYWxscy5cbiAqXG4gKiBAdGVtcGxhdGUgUiAtIFRoZSByZXR1cm4gdHlwZSBvZiB0aGUgaW5wdXQgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIGYgLSBUaGUgZnVuY3Rpb24gdG8gYmUgbG9ja2VkLiBJdCBjYW4gdGFrZSBhbnkgbnVtYmVyIG9mIHBhcmFtZXRlcnMgYW5kIHJldHVybiBhIHZhbHVlIG9mIHR5cGUgUi5cbiAqIEByZXR1cm4gQSBuZXcgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUgYXMgdGhlIGlucHV0IGZ1bmN0aW9uLCBidXQgd2l0aCBzZXF1ZW50aWFsIGV4ZWN1dGlvbiBndWFyYW50ZWVkLlxuICpcbiAqIEBmdW5jdGlvbiBsb2NraWZ5XG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAqICAgcGFydGljaXBhbnQgTG9ja2VkRnVuY3Rpb25cbiAqICAgcGFydGljaXBhbnQgT3JpZ2luYWxGdW5jdGlvblxuICogICBDYWxsZXItPj5Mb2NrZWRGdW5jdGlvbjogQ2FsbCB3aXRoIHBhcmFtc1xuICogICBMb2NrZWRGdW5jdGlvbi0+PkxvY2tlZEZ1bmN0aW9uOiBDaGVjayBjdXJyZW50IGxvY2tcbiAqICAgYWx0IExvY2sgaXMgcmVzb2x2ZWRcbiAqICAgICBMb2NrZWRGdW5jdGlvbi0+Pk9yaWdpbmFsRnVuY3Rpb246IEV4ZWN1dGUgd2l0aCBwYXJhbXNcbiAqICAgICBPcmlnaW5hbEZ1bmN0aW9uLS0+PkxvY2tlZEZ1bmN0aW9uOiBSZXR1cm4gcmVzdWx0XG4gKiAgICAgTG9ja2VkRnVuY3Rpb24tLT4+Q2FsbGVyOiBSZXR1cm4gcmVzdWx0XG4gKiAgIGVsc2UgTG9jayBpcyBwZW5kaW5nXG4gKiAgICAgTG9ja2VkRnVuY3Rpb24tPj5Mb2NrZWRGdW5jdGlvbjogUXVldWUgZXhlY3V0aW9uXG4gKiAgICAgTG9ja2VkRnVuY3Rpb24tLT4+Q2FsbGVyOiBSZXR1cm4gcHJvbWlzZVxuICogICAgIE5vdGUgb3ZlciBMb2NrZWRGdW5jdGlvbjogV2FpdCBmb3IgcHJldmlvdXMgZXhlY3V0aW9uXG4gKiAgICAgTG9ja2VkRnVuY3Rpb24tPj5PcmlnaW5hbEZ1bmN0aW9uOiBFeGVjdXRlIHdpdGggcGFyYW1zXG4gKiAgICAgT3JpZ2luYWxGdW5jdGlvbi0tPj5Mb2NrZWRGdW5jdGlvbjogUmV0dXJuIHJlc3VsdFxuICogICAgIExvY2tlZEZ1bmN0aW9uLS0+PkNhbGxlcjogUmVzb2x2ZSBwcm9taXNlIHdpdGggcmVzdWx0XG4gKiAgIGVuZFxuICogICBMb2NrZWRGdW5jdGlvbi0+PkxvY2tlZEZ1bmN0aW9uOiBVcGRhdGUgbG9ja1xuICpcbiAqIEBtZW1iZXJPZiBAZGVjYWYtdHMvdXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvY2tpZnk8Uj4oZjogKC4uLnBhcmFtczogdW5rbm93bltdKSA9PiBSKSB7XG4gIGxldCBsb2NrOiBQcm9taXNlPFIgfCB2b2lkPiA9IFByb21pc2UucmVzb2x2ZSgpO1xuICByZXR1cm4gKC4uLnBhcmFtczogdW5rbm93bltdKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gbG9jay50aGVuKCgpID0+IGYoLi4ucGFyYW1zKSk7XG4gICAgbG9jayA9IHJlc3VsdC5jYXRjaCgoKSA9PiB7fSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYWluQWJvcnRDb250cm9sbGVyKFxuICBjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIsXG4gIC4uLnNpZ25hbHM6IEFib3J0U2lnbmFsW11cbik6IEFib3J0Q29udHJvbGxlcjtcbmV4cG9ydCBmdW5jdGlvbiBjaGFpbkFib3J0Q29udHJvbGxlcihcbiAgLi4uc2lnbmFsczogQWJvcnRTaWduYWxbXVxuKTogQWJvcnRDb250cm9sbGVyO1xuZXhwb3J0IGZ1bmN0aW9uIGNoYWluQWJvcnRDb250cm9sbGVyKFxuICBhcmd1bWVudDA6IEFib3J0Q29udHJvbGxlciB8IEFib3J0U2lnbmFsLFxuICAuLi5yZW1haW5kZXI6IEFib3J0U2lnbmFsW11cbik6IEFib3J0Q29udHJvbGxlciB7XG4gIGxldCBzaWduYWxzOiBBYm9ydFNpZ25hbFtdO1xuICBsZXQgY29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyO1xuXG4gIC8vIG5vcm1hbGl6ZSBhcmdzXG4gIGlmIChhcmd1bWVudDAgaW5zdGFuY2VvZiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgc2lnbmFscyA9IFthcmd1bWVudDAsIC4uLnJlbWFpbmRlcl07XG4gIH0gZWxzZSB7XG4gICAgY29udHJvbGxlciA9IGFyZ3VtZW50MDtcbiAgICBzaWduYWxzID0gcmVtYWluZGVyO1xuICB9XG5cbiAgLy8gaWYgdGhlIGNvbnRyb2xsZXIgaXMgYWxyZWFkeSBhYm9ydGVkLCBleGl0IGVhcmx5XG4gIGlmIChjb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgcmV0dXJuIGNvbnRyb2xsZXI7XG4gIH1cblxuICBjb25zdCBoYW5kbGVyID0gKCkgPT4gY29udHJvbGxlci5hYm9ydCgpO1xuXG4gIGZvciAoY29uc3Qgc2lnbmFsIG9mIHNpZ25hbHMpIHtcbiAgICAvLyBjaGVjayBiZWZvcmUgYWRkaW5nISAoYW5kIGFzc3VtZSB0aGVyZSBpcyBubyBwb3NzaWJsZSB3YXkgdGhhdCB0aGUgc2lnbmFsIGNvdWxkXG4gICAgLy8gYWJvcnQgYmV0d2VlbiB0aGUgYGlmYCBjaGVjayBhbmQgYWRkaW5nIHRoZSBldmVudCBsaXN0ZW5lcilcbiAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGhhbmRsZXIsIHtcbiAgICAgIG9uY2U6IHRydWUsXG4gICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRyb2xsZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGF3bkNvbW1hbmQ8UiA9IHN0cmluZz4oXG4gIG91dHB1dDogU3RhbmRhcmRPdXRwdXRXcml0ZXI8Uj4sXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgb3B0czogU3Bhd25PcHRpb25zV2l0aG91dFN0ZGlvLFxuICBhYm9ydDogQWJvcnRDb250cm9sbGVyLFxuICBsb2dnZXI6IExvZ2dlclxuKTogQ2hpbGRQcm9jZXNzV2l0aG91dE51bGxTdHJlYW1zIHtcbiAgZnVuY3Rpb24gc3Bhd25Jbm5lcihjb21tYW5kOiBzdHJpbmcsIGNvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcikge1xuICAgIGNvbnN0IFtjbWQsIGFyZ3pdID0gb3V0cHV0LnBhcnNlQ29tbWFuZChjb21tYW5kKTtcbiAgICBsb2dnZXIuaW5mbyhgUnVubmluZyBjb21tYW5kOiAke2NtZH1gKTtcbiAgICBsb2dnZXIuZGVidWcoYHdpdGggYXJnczogJHthcmd6LmpvaW4oXCIgXCIpfWApO1xuICAgIGNvbnN0IGNoaWxkUHJvY2VzcyA9IHNwYXduKGNtZCwgYXJneiwge1xuICAgICAgLi4ub3B0cyxcbiAgICAgIGN3ZDogb3B0cy5jd2QgfHwgcHJvY2Vzcy5jd2QoKSxcbiAgICAgIGVudjogT2JqZWN0LmFzc2lnbih7fSwgcHJvY2Vzcy5lbnYsIG9wdHMuZW52LCB7IFBBVEg6IHByb2Nlc3MuZW52LlBBVEggfSksXG4gICAgICBzaGVsbDogb3B0cy5zaGVsbCB8fCBmYWxzZSxcbiAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gICAgbG9nZ2VyLnZlcmJvc2UoYHBpZCA6ICR7Y2hpbGRQcm9jZXNzLnBpZH1gKTtcbiAgICByZXR1cm4gY2hpbGRQcm9jZXNzO1xuICB9XG5cbiAgY29uc3QgbSA9IGNvbW1hbmQubWF0Y2goL1s8PiQjXS9nKTtcbiAgaWYgKG0pXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgY29tbWFuZDogJHtjb21tYW5kfS4gY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzOiAke219YFxuICAgICk7XG4gIGlmIChjb21tYW5kLmluY2x1ZGVzKFwiIHwgXCIpKSB7XG4gICAgY29uc3QgY21kcyA9IGNvbW1hbmQuc3BsaXQoXCIgfCBcIik7XG4gICAgY29uc3Qgc3Bhd25zID0gW107XG4gICAgY29uc3QgY29udHJvbGxlcnMgPSBuZXcgQXJyYXkoY21kcy5sZW5ndGgpO1xuICAgIGNvbnRyb2xsZXJzWzBdID0gYWJvcnQ7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaSAhPT0gMClcbiAgICAgICAgY29udHJvbGxlcnNbaV0gPSBjaGFpbkFib3J0Q29udHJvbGxlcihjb250cm9sbGVyc1tpIC0gMV0uc2lnbmFsKTtcbiAgICAgIHNwYXducy5wdXNoKHNwYXduSW5uZXIoY21kc1tpXSwgY29udHJvbGxlcnNbaV0pKTtcbiAgICAgIGlmIChpID09PSAwKSBjb250aW51ZTtcbiAgICAgIHNwYXduc1tpIC0gMV0uc3Rkb3V0LnBpcGUoc3Bhd25zW2ldLnN0ZGluKTtcbiAgICB9XG4gICAgcmV0dXJuIHNwYXduc1tjbWRzLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgcmV0dXJuIHNwYXduSW5uZXIoY29tbWFuZCwgYWJvcnQpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFeGVjdXRlcyBhIGNvbW1hbmQgYXN5bmNocm9ub3VzbHkgd2l0aCBjdXN0b21pemFibGUgb3V0cHV0IGhhbmRsaW5nLlxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiBydW5zIGEgc2hlbGwgY29tbWFuZCBhcyBhIGNoaWxkIHByb2Nlc3MsIHByb3ZpZGluZyBmaW5lLWdyYWluZWRcbiAqIGNvbnRyb2wgb3ZlciBpdHMgZXhlY3V0aW9uIGFuZCBvdXRwdXQgaGFuZGxpbmcuIEl0IHN1cHBvcnRzIGN1c3RvbSBvdXRwdXQgd3JpdGVycyxcbiAqIGFsbG93cyBmb3IgY29tbWFuZCBhYm9ydGlvbiwgYW5kIGNhcHR1cmVzIGJvdGggc3Rkb3V0IGFuZCBzdGRlcnIuXG4gKlxuICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgcmVzb2x2ZWQgdmFsdWUgZnJvbSB0aGUgY29tbWFuZCBleGVjdXRpb24uXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZCB0byBydW4sIGVpdGhlciBhcyBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIG9wdHMgLSBTcGF3biBvcHRpb25zIGZvciB0aGUgY2hpbGQgcHJvY2Vzcy4gRGVmYXVsdHMgdG8gYW4gZW1wdHkgb2JqZWN0LlxuICogQHBhcmFtIG91dHB1dENvbnN0cnVjdG9yIC0gQ29uc3RydWN0b3IgZm9yIHRoZSBvdXRwdXQgd3JpdGVyLiBEZWZhdWx0cyB0byBTdGFuZGFyZE91dHB1dFdyaXRlci5cbiAqIEBwYXJhbSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgb3V0cHV0IGNvbnN0cnVjdG9yLlxuICogQHJldHVybiB7Q29tbWFuZFJlc3VsdH0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNvbW1hbmQgcmVzdWx0IG9mIHR5cGUgUi5cbiAqXG4gKiBAZnVuY3Rpb24gcnVuQ29tbWFuZFxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gKiAgIHBhcnRpY2lwYW50IHJ1bkNvbW1hbmRcbiAqICAgcGFydGljaXBhbnQgT3V0cHV0V3JpdGVyXG4gKiAgIHBhcnRpY2lwYW50IENoaWxkUHJvY2Vzc1xuICogICBDYWxsZXItPj5ydW5Db21tYW5kOiBDYWxsIHdpdGggY29tbWFuZCBhbmQgb3B0aW9uc1xuICogICBydW5Db21tYW5kLT4+T3V0cHV0V3JpdGVyOiBDcmVhdGUgbmV3IGluc3RhbmNlXG4gKiAgIHJ1bkNvbW1hbmQtPj5PdXRwdXRXcml0ZXI6IFBhcnNlIGNvbW1hbmRcbiAqICAgcnVuQ29tbWFuZC0+PkNoaWxkUHJvY2VzczogU3Bhd24gcHJvY2Vzc1xuICogICBDaGlsZFByb2Nlc3MtLT4+cnVuQ29tbWFuZDogUmV0dXJuIHByb2Nlc3Mgb2JqZWN0XG4gKiAgIHJ1bkNvbW1hbmQtPj5DaGlsZFByb2Nlc3M6IFNldCB1cCBldmVudCBsaXN0ZW5lcnNcbiAqICAgbG9vcCBGb3IgZWFjaCBzdGRvdXQgZGF0YVxuICogICAgIENoaWxkUHJvY2Vzcy0+PnJ1bkNvbW1hbmQ6IEVtaXQgc3Rkb3V0IGRhdGFcbiAqICAgICBydW5Db21tYW5kLT4+T3V0cHV0V3JpdGVyOiBIYW5kbGUgc3Rkb3V0IGRhdGFcbiAqICAgZW5kXG4gKiAgIGxvb3AgRm9yIGVhY2ggc3RkZXJyIGRhdGFcbiAqICAgICBDaGlsZFByb2Nlc3MtPj5ydW5Db21tYW5kOiBFbWl0IHN0ZGVyciBkYXRhXG4gKiAgICAgcnVuQ29tbWFuZC0+Pk91dHB1dFdyaXRlcjogSGFuZGxlIHN0ZGVyciBkYXRhXG4gKiAgIGVuZFxuICogICBDaGlsZFByb2Nlc3MtPj5ydW5Db21tYW5kOiBFbWl0IGVycm9yIChpZiBhbnkpXG4gKiAgIHJ1bkNvbW1hbmQtPj5PdXRwdXRXcml0ZXI6IEhhbmRsZSBlcnJvclxuICogICBDaGlsZFByb2Nlc3MtPj5ydW5Db21tYW5kOiBFbWl0IGV4aXRcbiAqICAgcnVuQ29tbWFuZC0+Pk91dHB1dFdyaXRlcjogSGFuZGxlIGV4aXRcbiAqICAgT3V0cHV0V3JpdGVyLS0+PnJ1bkNvbW1hbmQ6IFJlc29sdmUgb3IgcmVqZWN0IHByb21pc2VcbiAqICAgcnVuQ29tbWFuZC0tPj5DYWxsZXI6IFJldHVybiBDb21tYW5kUmVzdWx0XG4gKlxuICogQG1lbWJlck9mIEBkZWNhZi10cy91dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuQ29tbWFuZDxSID0gc3RyaW5nPihcbiAgY29tbWFuZDogc3RyaW5nLFxuICBvcHRzOiBTcGF3bk9wdGlvbnNXaXRob3V0U3RkaW8gPSB7fSxcbiAgb3V0cHV0Q29uc3RydWN0b3I6IE91dHB1dFdyaXRlckNvbnN0cnVjdG9yPFxuICAgIFIsXG4gICAgU3RhbmRhcmRPdXRwdXRXcml0ZXI8Uj4sXG4gICAgRXJyb3JcbiAgPiA9IFN0YW5kYXJkT3V0cHV0V3JpdGVyPFI+LFxuICAuLi5hcmdzOiB1bmtub3duW11cbik6IENvbW1hbmRSZXN1bHQ8Uj4ge1xuICBjb25zdCBsb2dnZXIgPSBMb2dnaW5nLmZvcihydW5Db21tYW5kKTtcbiAgY29uc3QgYWJvcnQgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgY29uc3QgcmVzdWx0OiBPbWl0PENvbW1hbmRSZXN1bHQsIFwicHJvbWlzZVwiIHwgXCJwaXBlXCI+ID0ge1xuICAgIGFib3J0OiBhYm9ydCxcbiAgICBjb21tYW5kOiBjb21tYW5kLFxuICAgIGxvZ3M6IFtdLFxuICAgIGVycnM6IFtdLFxuICB9O1xuXG4gIGNvbnN0IGxvY2sgPSBuZXcgUHJvbWlzZTxSPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbGV0IG91dHB1dDtcbiAgICB0cnkge1xuICAgICAgb3V0cHV0ID0gbmV3IG91dHB1dENvbnN0cnVjdG9yKFxuICAgICAgICBjb21tYW5kLFxuICAgICAgICB7XG4gICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICByZWplY3QsXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmFyZ3NcbiAgICAgICk7XG5cbiAgICAgIHJlc3VsdC5jbWQgPSBzcGF3bkNvbW1hbmQ8Uj4ob3V0cHV0LCBjb21tYW5kLCBvcHRzLCBhYm9ydCwgbG9nZ2VyKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgRXJyb3IgcnVubmluZyBjb21tYW5kICR7Y29tbWFuZH06ICR7ZX1gKSk7XG4gICAgfVxuXG4gICAgcmVzdWx0LmNtZC5zdGRvdXQuc2V0RW5jb2RpbmcoXCJ1dGY4XCIpO1xuXG4gICAgcmVzdWx0LmNtZC5zdGRvdXQub24oXCJkYXRhXCIsIChjaHVuazogYW55KSA9PiB7XG4gICAgICBjaHVuayA9IGNodW5rLnRvU3RyaW5nKCk7XG4gICAgICByZXN1bHQubG9ncy5wdXNoKGNodW5rKTtcbiAgICAgIG91dHB1dC5kYXRhKGNodW5rKTtcbiAgICB9KTtcblxuICAgIHJlc3VsdC5jbWQuc3RkZXJyLm9uKFwiZGF0YVwiLCAoZGF0YTogYW55KSA9PiB7XG4gICAgICBkYXRhID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgcmVzdWx0LmVycnMucHVzaChkYXRhKTtcbiAgICAgIG91dHB1dC5lcnJvcihkYXRhKTtcbiAgICB9KTtcblxuICAgIHJlc3VsdC5jbWQub25jZShcImVycm9yXCIsIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICBvdXRwdXQuZXhpdChlcnIubWVzc2FnZSwgcmVzdWx0LmVycnMpO1xuICAgIH0pO1xuXG4gICAgcmVzdWx0LmNtZC5vbmNlKFwiZXhpdFwiLCAoY29kZTogbnVtYmVyID0gMCkgPT4ge1xuICAgICAgaWYgKGFib3J0LnNpZ25hbC5hYm9ydGVkICYmIGNvZGUgPT09IG51bGwpIGNvZGUgPSBBYm9ydENvZGUgYXMgYW55O1xuICAgICAgb3V0cHV0LmV4aXQoY29kZSwgY29kZSA9PT0gMCA/IHJlc3VsdC5sb2dzIDogcmVzdWx0LmVycnMpO1xuICAgIH0pO1xuICB9KTtcblxuICBPYmplY3QuYXNzaWduKHJlc3VsdCwge1xuICAgIHByb21pc2U6IGxvY2ssXG4gICAgcGlwZTogYXN5bmMgPEU+KGNiOiAocjogUikgPT4gRSkgPT4ge1xuICAgICAgY29uc3QgbCA9IGxvZ2dlci5mb3IoXCJwaXBlXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbC52ZXJib3NlKGBFeGVjdXRpbmcgcGlwZSBmdW5jdGlvbiAke2NvbW1hbmR9Li4uYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogUiA9IGF3YWl0IGxvY2s7XG4gICAgICAgIGwudmVyYm9zZShgUGlwaW5nIG91dHB1dCB0byAke2NiLm5hbWV9OiAke3Jlc3VsdH1gKTtcbiAgICAgICAgcmV0dXJuIGNiKHJlc3VsdCk7XG4gICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgIGwuZXJyb3IoYEVycm9yIHBpcGluZyBjb21tYW5kIG91dHB1dDogJHtlfWApO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQgYXMgQ29tbWFuZFJlc3VsdDxSPjtcbn1cbiIsImltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBwYXRjaFN0cmluZyB9IGZyb20gXCIuL3RleHRcIjtcbmltcG9ydCB7IHJ1bkNvbW1hbmQgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgRGVwZW5kZW5jeU1hcCwgU2ltcGxlRGVwZW5kZW5jeU1hcCB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5cbmNvbnN0IGxvZ2dlciA9IExvZ2dpbmcuZm9yKFwiZnNcIik7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFBhdGNoZXMgYSBmaWxlIHdpdGggZ2l2ZW4gdmFsdWVzLlxuICogQHN1bW1hcnkgUmVhZHMgYSBmaWxlLCBhcHBsaWVzIHBhdGNoZXMgdXNpbmcgVGV4dFV0aWxzLCBhbmQgd3JpdGVzIHRoZSByZXN1bHQgYmFjayB0byB0aGUgZmlsZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBmaWxlIHRvIGJlIHBhdGNoZWQuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz59IHZhbHVlcyAtIFRoZSB2YWx1ZXMgdG8gcGF0Y2ggaW50byB0aGUgZmlsZS5cbiAqIEByZXR1cm4ge3ZvaWR9XG4gKlxuICogQGZ1bmN0aW9uIHBhdGNoRmlsZVxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gKiAgIHBhcnRpY2lwYW50IHBhdGNoRmlsZVxuICogICBwYXJ0aWNpcGFudCBmc1xuICogICBwYXJ0aWNpcGFudCByZWFkRmlsZVxuICogICBwYXJ0aWNpcGFudCBUZXh0VXRpbHNcbiAqICAgcGFydGljaXBhbnQgd3JpdGVGaWxlXG4gKiAgIENhbGxlci0+PnBhdGNoRmlsZTogQ2FsbCB3aXRoIHBhdGggYW5kIHZhbHVlc1xuICogICBwYXRjaEZpbGUtPj5mczogQ2hlY2sgaWYgZmlsZSBleGlzdHNcbiAqICAgcGF0Y2hGaWxlLT4+cmVhZEZpbGU6IFJlYWQgZmlsZSBjb250ZW50XG4gKiAgIHJlYWRGaWxlLT4+ZnM6IFJlYWQgZmlsZVxuICogICBmcy0tPj5yZWFkRmlsZTogUmV0dXJuIGZpbGUgY29udGVudFxuICogICByZWFkRmlsZS0tPj5wYXRjaEZpbGU6IFJldHVybiBmaWxlIGNvbnRlbnRcbiAqICAgcGF0Y2hGaWxlLT4+VGV4dFV0aWxzOiBQYXRjaCBzdHJpbmdcbiAqICAgVGV4dFV0aWxzLS0+PnBhdGNoRmlsZTogUmV0dXJuIHBhdGNoZWQgY29udGVudFxuICogICBwYXRjaEZpbGUtPj53cml0ZUZpbGU6IFdyaXRlIHBhdGNoZWQgY29udGVudFxuICogICB3cml0ZUZpbGUtPj5mczogV3JpdGUgdG8gZmlsZVxuICogICBmcy0tPj53cml0ZUZpbGU6IEZpbGUgd3JpdHRlblxuICogICB3cml0ZUZpbGUtLT4+cGF0Y2hGaWxlOiBGaWxlIHdyaXR0ZW5cbiAqICAgcGF0Y2hGaWxlLS0+PkNhbGxlcjogUGF0Y2hpbmcgY29tcGxldGVcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZzLXV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaEZpbGUoXG4gIHBhdGg6IHN0cmluZyxcbiAgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+XG4pIHtcbiAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihwYXRjaEZpbGUpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMocGF0aCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIG5vdCBmb3VuZCBhdCBwYXRoIFwiJHtwYXRofVwiLmApO1xuICBsZXQgY29udGVudCA9IHJlYWRGaWxlKHBhdGgpO1xuXG4gIHRyeSB7XG4gICAgbG9nLnZlcmJvc2UoYFBhdGNoaW5nIGZpbGUgXCIke3BhdGh9XCIuLi5gKTtcbiAgICBsb2cuZGVidWcoYHdpdGggdmFsdWU6ICR7SlNPTi5zdHJpbmdpZnkodmFsdWVzKX1gKTtcbiAgICBjb250ZW50ID0gcGF0Y2hTdHJpbmcoY29udGVudCwgdmFsdWVzKTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHBhdGNoaW5nIGZpbGU6ICR7ZXJyb3J9YCk7XG4gIH1cbiAgd3JpdGVGaWxlKHBhdGgsIGNvbnRlbnQpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZWFkcyBhIGZpbGUgYW5kIHJldHVybnMgaXRzIGNvbnRlbnQuXG4gKiBAc3VtbWFyeSBSZWFkcyB0aGUgY29udGVudCBvZiBhIGZpbGUgYXQgdGhlIHNwZWNpZmllZCBwYXRoIGFuZCByZXR1cm5zIGl0IGFzIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGZpbGUgdG8gYmUgcmVhZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUuXG4gKlxuICogQGZ1bmN0aW9uIHJlYWRGaWxlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZEZpbGUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihyZWFkRmlsZSk7XG4gIHRyeSB7XG4gICAgbG9nLnZlcmJvc2UoYFJlYWRpbmcgZmlsZSBcIiR7cGF0aH1cIi4uLmApO1xuICAgIHJldHVybiBmcy5yZWFkRmlsZVN5bmMocGF0aCwgXCJ1dGY4XCIpO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZy52ZXJib3NlKGBFcnJvciByZWFkaW5nIGZpbGUgXCIke3BhdGh9XCI6ICR7ZXJyb3J9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciByZWFkaW5nIGZpbGUgXCIke3BhdGh9XCI6ICR7ZXJyb3J9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gV3JpdGVzIGRhdGEgdG8gYSBmaWxlLlxuICogQHN1bW1hcnkgV3JpdGVzIHRoZSBwcm92aWRlZCBkYXRhIHRvIGEgZmlsZSBhdCB0aGUgc3BlY2lmaWVkIHBhdGguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgZmlsZSB0byBiZSB3cml0dGVuLlxuICogQHBhcmFtIHtzdHJpbmcgfCBCdWZmZXJ9IGRhdGEgLSBUaGUgZGF0YSB0byBiZSB3cml0dGVuIHRvIHRoZSBmaWxlLlxuICogQHJldHVybiB7dm9pZH1cbiAqXG4gKiBAZnVuY3Rpb24gd3JpdGVGaWxlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVGaWxlKHBhdGg6IHN0cmluZywgZGF0YTogc3RyaW5nIHwgQnVmZmVyKTogdm9pZCB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3Iod3JpdGVGaWxlKTtcbiAgdHJ5IHtcbiAgICBsb2cudmVyYm9zZShgV3JpdGluZyBmaWxlIFwiJHtwYXRofSB3aXRoICR7ZGF0YS5sZW5ndGh9IGJ5dGVzLi4uYCk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLCBkYXRhLCBcInV0ZjhcIik7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgbG9nLnZlcmJvc2UoYEVycm9yIHdyaXRpbmcgZmlsZSBcIiR7cGF0aH1cIjogJHtlcnJvcn1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHdyaXRpbmcgZmlsZSBcIiR7cGF0aH1cIjogJHtlcnJvcn1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYWxsIGZpbGVzIHJlY3Vyc2l2ZWx5IGZyb20gYSBkaXJlY3RvcnkuXG4gKiBAc3VtbWFyeSBUcmF2ZXJzZXMgdGhyb3VnaCBkaXJlY3RvcmllcyBhbmQgc3ViZGlyZWN0b3JpZXMgdG8gY29sbGVjdCBhbGwgZmlsZSBwYXRocy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcCAtIFRoZSBwYXRoIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLlxuICogQHBhcmFtIGZpbHRlclxuICogQHJldHVybiB7c3RyaW5nW119IEFycmF5IG9mIGZpbGUgcGF0aHMuXG4gKlxuICogQGZ1bmN0aW9uIGdldEFsbEZpbGVzXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTpmcy11dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsRmlsZXMoXG4gIHA6IHN0cmluZyxcbiAgZmlsdGVyPzogKGY6IHN0cmluZywgaT86IG51bWJlcikgPT4gYm9vbGVhblxuKTogc3RyaW5nW10ge1xuICBjb25zdCBsb2cgPSBsb2dnZXIuZm9yKGdldEFsbEZpbGVzKTtcbiAgY29uc3QgZmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgdHJ5IHtcbiAgICBsb2cudmVyYm9zZShgUmV0cmlldmluZyBhbGwgZmlsZXMgZnJvbSBcIiR7cH1cIi4uLmApO1xuICAgIGNvbnN0IGVudHJpZXMgPSBmcy5yZWFkZGlyU3luYyhwKTtcblxuICAgIGVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKHAsIGVudHJ5KTtcbiAgICAgIGNvbnN0IHN0YXQgPSBmcy5zdGF0U3luYyhmdWxsUGF0aCk7XG5cbiAgICAgIGlmIChzdGF0LmlzRmlsZSgpKSB7XG4gICAgICAgIGZpbGVzLnB1c2goZnVsbFBhdGgpO1xuICAgICAgfSBlbHNlIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgZmlsZXMucHVzaCguLi5nZXRBbGxGaWxlcyhmdWxsUGF0aCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghZmlsdGVyKSByZXR1cm4gZmlsZXM7XG4gICAgcmV0dXJuIGZpbGVzLmZpbHRlcihmaWx0ZXIpO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZy52ZXJib3NlKGBFcnJvciByZXRyaWV2aW5nIGZpbGVzIGZyb20gXCIke3B9XCI6ICR7ZXJyb3J9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciByZXRyaWV2aW5nIGZpbGVzIGZyb20gXCIke3B9XCI6ICR7ZXJyb3J9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmFtZUZpbGUoc291cmNlOiBzdHJpbmcsIGRlc3Q6IHN0cmluZykge1xuICBjb25zdCBsb2cgPSBsb2dnZXIuZm9yKHJlbmFtZUZpbGUpO1xuICBsZXQgZGVzY3JpcHRvclNvdXJjZSwgZGVzY3JpcHRvckRlc3Q7XG5cbiAgdHJ5IHtcbiAgICBkZXNjcmlwdG9yU291cmNlID0gZnMuc3RhdFN5bmMoc291cmNlKTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBsb2cudmVyYm9zZShgU291cmNlIHBhdGggXCIke3NvdXJjZX1cIiBkb2VzIG5vdCBleGlzdDogJHtlcnJvcn1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNvdXJjZSBwYXRoIFwiJHtzb3VyY2V9XCIgZG9lcyBub3QgZXhpc3Q6ICR7ZXJyb3J9YCk7XG4gIH1cblxuICB0cnkge1xuICAgIGRlc2NyaXB0b3JEZXN0ID0gZnMuc3RhdFN5bmMoZGVzdCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgLy8gZG8gbm90aGluZy4gaXRzIG9rXG4gIH1cbiAgaWYgKGRlc2NyaXB0b3JEZXN0KSB7XG4gICAgbG9nLnZlcmJvc2UoYERlc3RpbmF0aW9uIHBhdGggXCIke2Rlc3R9XCIgYWxyZWFkeSBleGlzdHNgKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERlc3RpbmF0aW9uIHBhdGggXCIke2Rlc3R9XCIgYWxyZWFkeSBleGlzdHNgKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgUmVuYW1pbmcgJHtkZXNjcmlwdG9yU291cmNlLmlzRmlsZSgpID8gXCJmaWxlXCIgOiBcImRpcmVjdG9yeVwifSBcIiR7c291cmNlfVwiIHRvIFwiJHtkZXN0fS4uLmBcbiAgICApO1xuICAgIGZzLnJlbmFtZVN5bmMoc291cmNlLCBkZXN0KTtcbiAgICBsb2cudmVyYm9zZShgU3VjY2Vzc2Z1bGx5IHJlbmFtZWQgdG8gXCIke2Rlc3R9XCJgKTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBFcnJvciByZW5hbWluZyAke2Rlc2NyaXB0b3JTb3VyY2UuaXNGaWxlKCkgPyBcImZpbGVcIiA6IFwiZGlyZWN0b3J5XCJ9IFwiJHtzb3VyY2V9XCIgdG8gXCIke2Rlc3R9XCI6ICR7ZXJyb3J9YFxuICAgICk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEVycm9yIHJlbmFtaW5nICR7ZGVzY3JpcHRvclNvdXJjZS5pc0ZpbGUoKSA/IFwiZmlsZVwiIDogXCJkaXJlY3RvcnlcIn0gXCIke3NvdXJjZX1cIiB0byBcIiR7ZGVzdH1cIjogJHtlcnJvcn1gXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29weUZpbGUoc291cmNlOiBzdHJpbmcsIGRlc3Q6IHN0cmluZykge1xuICBjb25zdCBsb2cgPSBsb2dnZXIuZm9yKGNvcHlGaWxlKTtcbiAgbGV0IGRlc2NyaXB0b3JTb3VyY2UsIGRlc2NyaXB0b3JEZXN0O1xuICB0cnkge1xuICAgIGRlc2NyaXB0b3JTb3VyY2UgPSBmcy5zdGF0U3luYyhzb3VyY2UpO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZy52ZXJib3NlKGBTb3VyY2UgcGF0aCBcIiR7c291cmNlfVwiIGRvZXMgbm90IGV4aXN0OiAke2Vycm9yfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihgU291cmNlIHBhdGggXCIke3NvdXJjZX1cIiBkb2VzIG5vdCBleGlzdDogJHtlcnJvcn1gKTtcbiAgfVxuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBkZXNjcmlwdG9yRGVzdCA9IGZzLnN0YXRTeW5jKGRlc3QpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBpZiAoZGVzY3JpcHRvclNvdXJjZS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBsb2cudmVyYm9zZShgRGVzdCBwYXRoIFwiJHtkZXN0fVwiIGRvZXMgbm90IGV4aXN0LiBjcmVhdGluZ2ApO1xuICAgICAgZnMubWtkaXJTeW5jKGRlc3QsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgQ29weWluZyAke2Rlc2NyaXB0b3JTb3VyY2UuaXNGaWxlKCkgPyBcImZpbGVcIiA6IFwiZGlyZWN0b3J5XCJ9IFwiJHtzb3VyY2V9XCIgdG8gXCIke2Rlc3R9Li4uYFxuICAgICk7XG4gICAgZnMuY3BTeW5jKHNvdXJjZSwgZGVzdCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgRXJyb3IgY29weWluZyAke2Rlc2NyaXB0b3JTb3VyY2UuaXNGaWxlKCkgPyBcImZpbGVcIiA6IFwiZGlyZWN0b3J5XCJ9IFwiJHtzb3VyY2V9XCIgdG8gXCIke2Rlc3R9OiAke2Vycm9yfWBcbiAgICApO1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBFcnJvciBjb3B5aW5nICR7ZGVzY3JpcHRvclNvdXJjZS5pc0ZpbGUoKSA/IFwiZmlsZVwiIDogXCJkaXJlY3RvcnlcIn0gXCIke3NvdXJjZX1cIiB0byBcIiR7ZGVzdH06ICR7ZXJyb3J9YFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZVBhdGgocDogc3RyaW5nKSB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IoZGVsZXRlUGF0aCk7XG4gIHRyeSB7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IGZzLnN0YXRTeW5jKHApO1xuICAgIGlmIChkZXNjcmlwdG9yLmlzRmlsZSgpKSB7XG4gICAgICBsb2cudmVyYm9zZShgRGVsZXRpbmcgZmlsZSBcIiR7cH0uLi5gKTtcbiAgICAgIGZzLnJtU3luYyhwLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yLmlzRGlyZWN0b3J5KCkpXG4gICAgICBmcy5ybVN5bmMocCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZy52ZXJib3NlKGBFcnJvciBEZWxldGluZyBcIiR7cH1cIjogJHtlcnJvcn1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIERlbGV0aW5nIFwiJHtwfVwiOiAke2Vycm9yfWApO1xuICB9XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBwYWNrYWdlIGluZm9ybWF0aW9uIGZyb20gcGFja2FnZS5qc29uLlxuICogQHN1bW1hcnkgTG9hZHMgYW5kIHBhcnNlcyB0aGUgcGFja2FnZS5qc29uIGZpbGUgZnJvbSBhIHNwZWNpZmllZCBkaXJlY3Rvcnkgb3IgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIENhbiByZXR1cm4gdGhlIGVudGlyZSBwYWNrYWdlIG9iamVjdCBvciBhIHNwZWNpZmljIHByb3BlcnR5LlxuICogQHBhcmFtIHtzdHJpbmd9IFtwPXByb2Nlc3MuY3dkKCldIC0gVGhlIGRpcmVjdG9yeSBwYXRoIHdoZXJlIHRoZSBwYWNrYWdlLmpzb24gZmlsZSBpcyBsb2NhdGVkLlxuICogQHBhcmFtIHtzdHJpbmd9IFtwcm9wZXJ0eV0gLSBPcHRpb25hbC4gVGhlIHNwZWNpZmljIHByb3BlcnR5IHRvIHJldHJpZXZlIGZyb20gcGFja2FnZS5qc29uLlxuICogQHJldHVybiB7b2JqZWN0IHwgc3RyaW5nfSBUaGUgcGFyc2VkIGNvbnRlbnRzIG9mIHBhY2thZ2UuanNvbiBvciB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eS5cbiAqIEBmdW5jdGlvbiBnZXRQYWNrYWdlXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICogICBwYXJ0aWNpcGFudCBnZXRQYWNrYWdlXG4gKiAgIHBhcnRpY2lwYW50IHJlYWRGaWxlXG4gKiAgIHBhcnRpY2lwYW50IEpTT05cbiAqICAgQ2FsbGVyLT4+Z2V0UGFja2FnZTogQ2FsbCB3aXRoIHBhdGggYW5kIG9wdGlvbmFsIHByb3BlcnR5XG4gKiAgIGdldFBhY2thZ2UtPj5yZWFkRmlsZTogUmVhZCBwYWNrYWdlLmpzb25cbiAqICAgcmVhZEZpbGUtLT4+Z2V0UGFja2FnZTogUmV0dXJuIGZpbGUgY29udGVudFxuICogICBnZXRQYWNrYWdlLT4+SlNPTjogUGFyc2UgZmlsZSBjb250ZW50XG4gKiAgIEpTT04tLT4+Z2V0UGFja2FnZTogUmV0dXJuIHBhcnNlZCBvYmplY3RcbiAqICAgYWx0IHByb3BlcnR5IHNwZWNpZmllZFxuICogICAgIGdldFBhY2thZ2UtPj5nZXRQYWNrYWdlOiBDaGVjayBpZiBwcm9wZXJ0eSBleGlzdHNcbiAqICAgICBhbHQgcHJvcGVydHkgZXhpc3RzXG4gKiAgICAgICBnZXRQYWNrYWdlLS0+PkNhbGxlcjogUmV0dXJuIHByb3BlcnR5IHZhbHVlXG4gKiAgICAgZWxzZSBwcm9wZXJ0eSBkb2Vzbid0IGV4aXN0XG4gKiAgICAgICBnZXRQYWNrYWdlLS0+PkNhbGxlcjogVGhyb3cgRXJyb3JcbiAqICAgICBlbmRcbiAqICAgZWxzZSBubyBwcm9wZXJ0eSBzcGVjaWZpZWRcbiAqICAgICBnZXRQYWNrYWdlLS0+PkNhbGxlcjogUmV0dXJuIGVudGlyZSBwYWNrYWdlIG9iamVjdFxuICogICBlbmRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhY2thZ2UoXG4gIHA6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCksXG4gIHByb3BlcnR5Pzogc3RyaW5nXG4pOiBvYmplY3QgfCBzdHJpbmcge1xuICBsZXQgcGtnOiBhbnk7XG4gIHRyeSB7XG4gICAgcGtnID0gSlNPTi5wYXJzZShyZWFkRmlsZShwYXRoLmpvaW4ocCwgYHBhY2thZ2UuanNvbmApKSk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcmV0cmlldmUgcGFja2FnZSBpbmZvcm1hdGlvblwiICR7ZXJyb3J9YCk7XG4gIH1cblxuICBpZiAocHJvcGVydHkpIHtcbiAgICBpZiAoIShwcm9wZXJ0eSBpbiBwa2cpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9wZXJ0eSBcIiR7cHJvcGVydHl9XCIgbm90IGZvdW5kIGluIHBhY2thZ2UuanNvbmApO1xuICAgIHJldHVybiBwa2dbcHJvcGVydHldIGFzIHN0cmluZztcbiAgfVxuICByZXR1cm4gcGtnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0UGFja2FnZUF0dHJpYnV0ZShcbiAgYXR0cjogc3RyaW5nLFxuICB2YWx1ZTogc3RyaW5nLFxuICBwOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpXG4pOiB2b2lkIHtcbiAgY29uc3QgcGtnID0gZ2V0UGFja2FnZShwKSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBwa2dbYXR0cl0gPSB2YWx1ZTtcbiAgd3JpdGVGaWxlKHBhdGguam9pbihwLCBgcGFja2FnZS5qc29uYCksIEpTT04uc3RyaW5naWZ5KHBrZywgbnVsbCwgMikpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgdGhlIHZlcnNpb24gZnJvbSBwYWNrYWdlLmpzb24uXG4gKiBAc3VtbWFyeSBBIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRoYXQgY2FsbHMgZ2V0UGFja2FnZSB0byByZXRyaWV2ZSB0aGUgXCJ2ZXJzaW9uXCIgcHJvcGVydHkgZnJvbSBwYWNrYWdlLmpzb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gW3A9cHJvY2Vzcy5jd2QoKV0gLSBUaGUgZGlyZWN0b3J5IHBhdGggd2hlcmUgdGhlIHBhY2thZ2UuanNvbiBmaWxlIGlzIGxvY2F0ZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSB2ZXJzaW9uIHN0cmluZyBmcm9tIHBhY2thZ2UuanNvbi5cbiAqIEBmdW5jdGlvbiBnZXRQYWNrYWdlVmVyc2lvblxuICogQG1lbWJlck9mIG1vZHVsZTpmcy11dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFja2FnZVZlcnNpb24ocCA9IHByb2Nlc3MuY3dkKCkpOiBzdHJpbmcge1xuICByZXR1cm4gZ2V0UGFja2FnZShwLCBcInZlcnNpb25cIikgYXMgc3RyaW5nO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYWxsIGRlcGVuZGVuY2llcyBmcm9tIHRoZSBwcm9qZWN0LlxuICogQHN1bW1hcnkgRXhlY3V0ZXMgJ25wbSBscyAtLWpzb24nIGNvbW1hbmQgdG8gZ2V0IGEgZGV0YWlsZWQgbGlzdCBvZiBhbGwgZGVwZW5kZW5jaWVzIChwcm9kdWN0aW9uLCBkZXZlbG9wbWVudCwgYW5kIHBlZXIpIGFuZCB0aGVpciB2ZXJzaW9ucy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbcGF0aD1wcm9jZXNzLmN3ZCgpXSAtIFRoZSBkaXJlY3RvcnkgcGF0aCBvZiB0aGUgcHJvamVjdC5cbiAqIEByZXR1cm4ge1Byb21pc2U8e3Byb2Q6IEFycmF5PHtuYW1lOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZ30+LCBkZXY6IEFycmF5PHtuYW1lOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZ30+LCBwZWVyOiBBcnJheTx7bmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmd9Pn0+fSBBbiBvYmplY3QgY29udGFpbmluZyBhcnJheXMgb2YgcHJvZHVjdGlvbiwgZGV2ZWxvcG1lbnQsIGFuZCBwZWVyIGRlcGVuZGVuY2llcy5cbiAqIEBmdW5jdGlvbiBnZXREZXBlbmRlbmNpZXNcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gKiAgIHBhcnRpY2lwYW50IGdldERlcGVuZGVuY2llc1xuICogICBwYXJ0aWNpcGFudCBydW5Db21tYW5kXG4gKiAgIHBhcnRpY2lwYW50IEpTT05cbiAqICAgQ2FsbGVyLT4+Z2V0RGVwZW5kZW5jaWVzOiBDYWxsIHdpdGggb3B0aW9uYWwgcGF0aFxuICogICBnZXREZXBlbmRlbmNpZXMtPj5ydW5Db21tYW5kOiBFeGVjdXRlICducG0gbHMgLS1qc29uJ1xuICogICBydW5Db21tYW5kLS0+PmdldERlcGVuZGVuY2llczogUmV0dXJuIGNvbW1hbmQgb3V0cHV0XG4gKiAgIGdldERlcGVuZGVuY2llcy0+PkpTT046IFBhcnNlIGNvbW1hbmQgb3V0cHV0XG4gKiAgIEpTT04tLT4+Z2V0RGVwZW5kZW5jaWVzOiBSZXR1cm4gcGFyc2VkIG9iamVjdFxuICogICBnZXREZXBlbmRlbmNpZXMtPj5nZXREZXBlbmRlbmNpZXM6IFByb2Nlc3MgZGVwZW5kZW5jaWVzXG4gKiAgIGdldERlcGVuZGVuY2llcy0tPj5DYWxsZXI6IFJldHVybiBwcm9jZXNzZWQgZGVwZW5kZW5jaWVzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZzLXV0aWxzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXREZXBlbmRlbmNpZXMoXG4gIHBhdGg6IHN0cmluZyA9IHByb2Nlc3MuY3dkKClcbik6IFByb21pc2U8RGVwZW5kZW5jeU1hcD4ge1xuICBsZXQgcGtnOiBhbnk7XG5cbiAgdHJ5IHtcbiAgICBwa2cgPSBKU09OLnBhcnNlKGF3YWl0IHJ1bkNvbW1hbmQoYG5wbSBscyAtLWpzb25gLCB7IGN3ZDogcGF0aCB9KS5wcm9taXNlKTtcbiAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHJldHJpZXZlIGRlcGVuZGVuY2llczogJHtlfWApO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBjb25zdCBtYXBwZXIgPSAoZW50cnk6IFtzdHJpbmcsIHVua25vd25dLCBpbmRleDogbnVtYmVyKSA9PiAoe1xuICAgIG5hbWU6IGVudHJ5WzBdLFxuICAgIHZlcnNpb246IChlbnRyeVsxXSBhcyBhbnkpLnZlcnNpb24sXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgcHJvZDogT2JqZWN0LmVudHJpZXMocGtnLmRlcGVuZGVuY2llcyB8fCB7fSkubWFwKG1hcHBlciksXG4gICAgZGV2OiBPYmplY3QuZW50cmllcyhwa2cuZGV2RGVwZW5kZW5jaWVzIHx8IHt9KS5tYXAobWFwcGVyKSxcbiAgICBwZWVyOiBPYmplY3QuZW50cmllcyhwa2cucGVlckRlcGVuZGVuY2llcyB8fCB7fSkubWFwKG1hcHBlciksXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGVEZXBlbmRlbmNpZXMoKSB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IodXBkYXRlRGVwZW5kZW5jaWVzKTtcbiAgbG9nLmluZm8oXCJjaGVja2luZyBmb3IgdXBkYXRlcy4uLlwiKTtcbiAgYXdhaXQgcnVuQ29tbWFuZChcIm5weCBucG0tY2hlY2stdXBkYXRlcyAtdVwiKS5wcm9taXNlO1xuICBsb2cuaW5mbyhcInVwZGF0aW5nLi4uXCIpO1xuICBhd2FpdCBydW5Db21tYW5kKFwibnB4IG5wbSBydW4gZG8taW5zdGFsbFwiKS5wcm9taXNlO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbElmTm90QXZhaWxhYmxlKFxuICBkZXBzOiBzdHJpbmdbXSB8IHN0cmluZyxcbiAgZGVwZW5kZW5jaWVzPzogU2ltcGxlRGVwZW5kZW5jeU1hcFxuKSB7XG4gIGlmICghZGVwZW5kZW5jaWVzKSB7XG4gICAgY29uc3QgZDogRGVwZW5kZW5jeU1hcCA9IGF3YWl0IGdldERlcGVuZGVuY2llcygpO1xuICAgIGRlcGVuZGVuY2llcyA9IHtcbiAgICAgIHByb2Q6IGQucHJvZD8ubWFwKChwKSA9PiBwLm5hbWUpIHx8IFtdLFxuICAgICAgZGV2OiBkLmRldj8ubWFwKChkKSA9PiBkLm5hbWUpIHx8IFtdLFxuICAgICAgcGVlcjogZC5wZWVyPy5tYXAoKHApID0+IHAubmFtZSkgfHwgW10sXG4gICAgfTtcbiAgfVxuICBjb25zdCB7IHByb2QsIGRldiwgcGVlciB9ID0gZGVwZW5kZW5jaWVzO1xuICBjb25zdCBpbnN0YWxsZWQgPSBBcnJheS5mcm9tKFxuICAgIG5ldyBTZXQoWy4uLihwcm9kIHx8IFtdKSwgLi4uKGRldiB8fCBbXSksIC4uLihwZWVyIHx8IFtdKV0pXG4gICk7XG4gIGRlcHMgPSB0eXBlb2YgZGVwcyA9PT0gXCJzdHJpbmdcIiA/IFtkZXBzXSA6IGRlcHM7XG4gIGNvbnN0IHRvSW5zdGFsbCA9IGRlcHMuZmlsdGVyKChkKSA9PiAhaW5zdGFsbGVkLmluY2x1ZGVzKGQpKTtcblxuICBpZiAodG9JbnN0YWxsLmxlbmd0aCkgYXdhaXQgaW5zdGFsbERlcGVuZGVuY2llcyh7IGRldjogdG9JbnN0YWxsIH0pO1xuICBkZXBlbmRlbmNpZXMuZGV2ID0gZGVwZW5kZW5jaWVzLmRldiB8fCBbXTtcbiAgZGVwZW5kZW5jaWVzLmRldi5wdXNoKC4uLnRvSW5zdGFsbCk7XG4gIHJldHVybiBkZXBlbmRlbmNpZXM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdXNoVG9HaXQoKSB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IocHVzaFRvR2l0KTtcbiAgY29uc3QgZ2l0VXNlciA9IGF3YWl0IHJ1bkNvbW1hbmQoXCJnaXQgY29uZmlnIHVzZXIubmFtZVwiKS5wcm9taXNlO1xuICBjb25zdCBnaXRFbWFpbCA9IGF3YWl0IHJ1bkNvbW1hbmQoXCJnaXQgY29uZmlnIHVzZXIuZW1haWxcIikucHJvbWlzZTtcbiAgbG9nLnZlcmJvc2UoYGNhY2hlZCBnaXQgaWQ6ICR7Z2l0VXNlcn0vJHtnaXRFbWFpbH0uIGNoYW5naW5nIHRvIGF1dG9tYXRpb25gKTtcbiAgYXdhaXQgcnVuQ29tbWFuZCgnZ2l0IGNvbmZpZyB1c2VyLmVtYWlsIFwiYXV0b21hdGlvbkBkZWNhZi50c1wiJykucHJvbWlzZTtcbiAgYXdhaXQgcnVuQ29tbWFuZCgnZ2l0IGNvbmZpZyB1c2VyLm5hbWUgXCJkZWNhZlwiJykucHJvbWlzZTtcbiAgbG9nLmluZm8oXCJQdXNoaW5nIGNoYW5nZXMgdG8gZ2l0Li4uXCIpO1xuICBhd2FpdCBydW5Db21tYW5kKFwiZ2l0IGFkZCAuXCIpLnByb21pc2U7XG4gIGF3YWl0IHJ1bkNvbW1hbmQoYGdpdCBjb21taXQgLW0gXCJyZWZzICMxIC0gYWZ0ZXIgcmVwbyBzZXR1cFwiYCkucHJvbWlzZTtcbiAgYXdhaXQgcnVuQ29tbWFuZChcImdpdCBwdXNoXCIpLnByb21pc2U7XG4gIGF3YWl0IHJ1bkNvbW1hbmQoYGdpdCBjb25maWcgdXNlci5lbWFpbCBcIiR7Z2l0RW1haWx9XCJgKS5wcm9taXNlO1xuICBhd2FpdCBydW5Db21tYW5kKGBnaXQgY29uZmlnIHVzZXIubmFtZSBcIiR7Z2l0VXNlcn1cImApLnByb21pc2U7XG4gIGxvZy52ZXJib3NlKGByZXZlcnRlZCB0byBnaXQgaWQ6ICR7Z2l0VXNlcn0vJHtnaXRFbWFpbH1gKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxEZXBlbmRlbmNpZXMoZGVwZW5kZW5jaWVzOiB7XG4gIHByb2Q/OiBzdHJpbmdbXTtcbiAgZGV2Pzogc3RyaW5nW107XG4gIHBlZXI/OiBzdHJpbmdbXTtcbn0pIHtcbiAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihpbnN0YWxsRGVwZW5kZW5jaWVzKTtcbiAgY29uc3QgcHJvZCA9IGRlcGVuZGVuY2llcy5wcm9kIHx8IFtdO1xuICBjb25zdCBkZXYgPSBkZXBlbmRlbmNpZXMuZGV2IHx8IFtdO1xuICBjb25zdCBwZWVyID0gZGVwZW5kZW5jaWVzLnBlZXIgfHwgW107XG4gIGlmIChwcm9kLmxlbmd0aCkge1xuICAgIGxvZy5pbmZvKGBJbnN0YWxsaW5nIGRlcGVuZGVuY2llcyAke3Byb2Quam9pbihcIiwgXCIpfS4uLmApO1xuICAgIGF3YWl0IHJ1bkNvbW1hbmQoYG5wbSBpbnN0YWxsICR7cHJvZC5qb2luKFwiIFwiKX1gLCB7IGN3ZDogcHJvY2Vzcy5jd2QoKSB9KVxuICAgICAgLnByb21pc2U7XG4gIH1cbiAgaWYgKGRldi5sZW5ndGgpIHtcbiAgICBsb2cuaW5mbyhgSW5zdGFsbGluZyBkZXZEZXBlbmRlbmNpZXMgJHtkZXYuam9pbihcIiwgXCIpfS4uLmApO1xuICAgIGF3YWl0IHJ1bkNvbW1hbmQoYG5wbSBpbnN0YWxsIC0tc2F2ZS1kZXYgJHtkZXYuam9pbihcIiBcIil9YCwge1xuICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgIH0pLnByb21pc2U7XG4gIH1cbiAgaWYgKHBlZXIubGVuZ3RoKSB7XG4gICAgbG9nLmluZm8oYEluc3RhbGxpbmcgcGVlckRlcGVuZGVuY2llcyAke3BlZXIuam9pbihcIiwgXCIpfS4uLmApO1xuICAgIGF3YWl0IHJ1bkNvbW1hbmQoYG5wbSBpbnN0YWxsIC0tc2F2ZS1wZWVyICR7cGVlci5qb2luKFwiIFwiKX1gLCB7XG4gICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgfSkucHJvbWlzZTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbm9ybWFsaXplSW1wb3J0PFQ+KFxuICBpbXBvcnRQcm9taXNlOiBQcm9taXNlPFQ+XG4pOiBQcm9taXNlPFQ+IHtcbiAgLy8gQ29tbW9uSlMncyBgbW9kdWxlLmV4cG9ydHNgIGlzIHdyYXBwZWQgYXMgYGRlZmF1bHRgIGluIEVTTW9kdWxlLlxuICByZXR1cm4gaW1wb3J0UHJvbWlzZS50aGVuKChtOiBhbnkpID0+IChtLmRlZmF1bHQgfHwgbSkgYXMgVCk7XG59XG4iLCJpbXBvcnQgc2xvZ2FucyBmcm9tIFwiLi4vYXNzZXRzL3Nsb2dhbnMuanNvblwiO1xuaW1wb3J0IHsgc3R5bGUgfSBmcm9tIFwic3R5bGVkLXN0cmluZy1idWlsZGVyXCI7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQXJyYXkgb2YgQU5TSSBjb2xvciBjb2RlcyBmb3IgYmFubmVyIHN0eWxpbmcuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgc2V0IG9mIEFOU0kgY29sb3IgY29kZXMgdXNlZCB0byBzdHlsZSB0aGUgYmFubmVyIHRleHQuXG4gKi9cbmNvbnN0IGNvbG9ycyA9IFtcbiAgXCJcXHgxYlszODs1OzIxNW1cIiwgLy8gc29mdCBvcmFuZ2VcbiAgXCJcXHgxYlszODs1OzIwOW1cIiwgLy8gY29yYWxcbiAgXCJcXHgxYlszODs1OzIwNW1cIiwgLy8gcGlua1xuICBcIlxceDFiWzM4OzU7MjEwbVwiLCAvLyBwZWFjaHlcbiAgXCJcXHgxYlszODs1OzIxN21cIiwgLy8gc2FsbW9uXG4gIFwiXFx4MWJbMzg7NTsyMTZtXCIsIC8vIGxpZ2h0IGNvcmFsXG4gIFwiXFx4MWJbMzg7NTsyMjRtXCIsIC8vIGxpZ2h0IHBlYWNoXG4gIFwiXFx4MWJbMzg7NTsyMzBtXCIsIC8vIHNvZnQgY3JlYW1cbiAgXCJcXHgxYlszODs1OzIzMG1cIiwgLy8gc29mdCBjcmVhbVxuXTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUHJpbnRzIGEgc3R5bGVkIGJhbm5lciB0byB0aGUgY29uc29sZS5cbiAqIEBzdW1tYXJ5IEdlbmVyYXRlcyBhbmQgcHJpbnRzIGEgY29sb3JmdWwgQVNDSUkgYXJ0IGJhbm5lciB3aXRoIGEgcmFuZG9tIHNsb2dhbi5cbiAqIEBwYXJhbSB7TG9nZ2VyfSBbbG9nZ2VyXSAtIE9wdGlvbmFsIGxvZ2dlciBmb3IgdmVyYm9zZSBvdXRwdXQuXG4gKiBAZnVuY3Rpb24gcHJpbnRCYW5uZXJcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgcHJpbnRCYW5uZXJcbiAqICAgcGFydGljaXBhbnQgZ2V0U2xvZ2FuXG4gKiAgIHBhcnRpY2lwYW50IHBhZEVuZFxuICogICBwYXJ0aWNpcGFudCBjb25zb2xlXG4gKiAgIHByaW50QmFubmVyLT4+Z2V0U2xvZ2FuOiBDYWxsIGdldFNsb2dhbigpXG4gKiAgIGdldFNsb2dhbi0tPj5wcmludEJhbm5lcjogUmV0dXJuIHJhbmRvbSBzbG9nYW5cbiAqICAgcHJpbnRCYW5uZXItPj5wcmludEJhbm5lcjogQ3JlYXRlIGJhbm5lciBBU0NJSSBhcnRcbiAqICAgcHJpbnRCYW5uZXItPj5wcmludEJhbm5lcjogU3BsaXQgYmFubmVyIGludG8gbGluZXNcbiAqICAgcHJpbnRCYW5uZXItPj5wcmludEJhbm5lcjogQ2FsY3VsYXRlIG1heCBsaW5lIGxlbmd0aFxuICogICBwcmludEJhbm5lci0+PnBhZEVuZDogQ2FsbCBwYWRFbmQgd2l0aCBzbG9nYW5cbiAqICAgcGFkRW5kLS0+PnByaW50QmFubmVyOiBSZXR1cm4gcGFkZGVkIHNsb2dhbiBsaW5lXG4gKiAgIGxvb3AgRm9yIGVhY2ggYmFubmVyIGxpbmVcbiAqICAgICBwcmludEJhbm5lci0+PnN0eWxlOiBDYWxsIHN0eWxlKGxpbmUpXG4gKiAgICAgc3R5bGUtLT4+cHJpbnRCYW5uZXI6IFJldHVybiBzdHlsZWQgbGluZVxuICogICAgIHByaW50QmFubmVyLT4+Y29uc29sZTogTG9nIHN0eWxlZCBsaW5lXG4gKiAgIGVuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRCYW5uZXIobG9nZ2VyPzogTG9nZ2VyKSB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBnZXRTbG9nYW4oKTtcbiAgY29uc3QgYmFubmVyOiBzdHJpbmcgfCBzdHJpbmdbXSA9XG4gICAgYCMgICAgICAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRICDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgICDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAgICAgICDilpHilpLilpPilojilojilojilojilojilojilojilojilpPilpLilpEgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSBcbiMgICAgICAoICggICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgXG4jICAgICAgICkgKSAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICAgICBcbiMgICAgWz09PT09PT1dICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgICDilpHilpLilpPilojilpPilpLilpEgICAgICAgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgICDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgIFxuIyAgICAgXFxgLS0tLS3CtCAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgXG4jICAgICAgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRIFxuIyAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRICDilpHilpLilpPilojilojilojilojilojilojilojilojilpPilpLilpEgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICDilpHilpLilpPilojilojilojilojilojilojilojilpPilpLilpEgIFxuI2Auc3BsaXQoXCJcXG5cIik7XG4gIGNvbnN0IG1heExlbmd0aCA9IGJhbm5lci5yZWR1Y2UoKG1heCwgbGluZSkgPT4gTWF0aC5tYXgobWF4LCBsaW5lLmxlbmd0aCksIDApO1xuICBiYW5uZXIucHVzaChgIyAgJHttZXNzYWdlLnBhZFN0YXJ0KG1heExlbmd0aCAtIDMpfWApO1xuICBiYW5uZXIuZm9yRWFjaCgobGluZSwgaW5kZXgpID0+IHtcbiAgICAobG9nZ2VyID8gbG9nZ2VyLmluZm8uYmluZChsb2dnZXIpIDogY29uc29sZS5sb2cuYmluZChjb25zb2xlKSkoXG4gICAgICBzdHlsZShsaW5lIHx8IFwiXCIpLnJhdyhjb2xvcnNbaW5kZXhdKS50ZXh0XG4gICAgKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhIHNsb2dhbiBmcm9tIHRoZSBwcmVkZWZpbmVkIGxpc3QuXG4gKiBAc3VtbWFyeSBGZXRjaGVzIGEgcmFuZG9tIHNsb2dhbiBvciBhIHNwZWNpZmljIG9uZSBieSBpbmRleCBmcm9tIHRoZSBzbG9nYW5zIGxpc3QuXG4gKiBAcGFyYW0ge251bWJlcn0gW2ldIC0gT3B0aW9uYWwgaW5kZXggdG8gcmV0cmlldmUgYSBzcGVjaWZpYyBzbG9nYW4uXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzZWxlY3RlZCBzbG9nYW4uXG4gKiBAZnVuY3Rpb24gZ2V0U2xvZ2FuXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IGdldFNsb2dhblxuICogICBwYXJ0aWNpcGFudCBNYXRoLnJhbmRvbVxuICogICBwYXJ0aWNpcGFudCBzbG9nYW5zXG4gKiAgIGFsdCBpIGlzIHVuZGVmaW5lZFxuICogICAgIGdldFNsb2dhbi0+Pk1hdGgucmFuZG9tOiBHZW5lcmF0ZSByYW5kb20gaW5kZXhcbiAqICAgICBNYXRoLnJhbmRvbS0tPj5nZXRTbG9nYW46IFJldHVybiByYW5kb20gaW5kZXhcbiAqICAgZWxzZSBpIGlzIGRlZmluZWRcbiAqICAgICBOb3RlIG92ZXIgZ2V0U2xvZ2FuOiBVc2UgcHJvdmlkZWQgaW5kZXhcbiAqICAgZW5kXG4gKiAgIGdldFNsb2dhbi0+PnNsb2dhbnM6IEFjY2VzcyBzbG9nYW4gYXQgaW5kZXhcbiAqICAgc2xvZ2Fucy0tPj5nZXRTbG9nYW46IFJldHVybiBzbG9nYW5cbiAqICAgYWx0IEVycm9yIG9jY3Vyc1xuICogICAgIGdldFNsb2dhbi0+PmdldFNsb2dhbjogVGhyb3cgZXJyb3JcbiAqICAgZW5kXG4gKiAgIGdldFNsb2dhbi0tPj5DYWxsZXI6IFJldHVybiBzbG9nYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNsb2dhbihpPzogbnVtYmVyKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBpID1cbiAgICAgIHR5cGVvZiBpID09PSBcInVuZGVmaW5lZFwiID8gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogc2xvZ2Fucy5sZW5ndGgpIDogaTtcbiAgICByZXR1cm4gc2xvZ2Fuc1tpXS5TbG9nYW47XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcmV0cmlldmUgc2xvZ2FuczogJHtlcnJvcn1gKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBAZnVuY3Rpb24gaXNCcm93c2VyXG4gKiBAZGVzY3JpcHRpb24gRGV0ZXJtaW5lcyBpZiB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyBhIGJyb3dzZXIgYnkgY2hlY2tpbmcgdGhlIHByb3RvdHlwZSBjaGFpbiBvZiB0aGUgZ2xvYmFsIG9iamVjdC5cbiAqIEBzdW1tYXJ5IENoZWNrcyBpZiB0aGUgY29kZSBpcyBydW5uaW5nIGluIGEgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBlbnZpcm9ubWVudCBpcyBhIGJyb3dzZXIsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQnJvd3NlcigpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YoT2JqZWN0LmdldFByb3RvdHlwZU9mKGdsb2JhbFRoaXMpKSAhPT1cbiAgICBPYmplY3QucHJvdG90eXBlXG4gICk7XG59XG4iLCIvKipcbiAqIEBjbGFzcyBPYmplY3RBY2N1bXVsYXRvclxuICogQHRlbXBsYXRlIFQgLSBUaGUgdHlwZSBvZiB0aGUgYWNjdW11bGF0ZWQgb2JqZWN0LCBleHRlbmRzIG9iamVjdFxuICogQGRlc2NyaXB0aW9uIEEgY2xhc3MgdGhhdCBhY2N1bXVsYXRlcyBvYmplY3RzIGFuZCBwcm92aWRlcyB0eXBlLXNhZmUgYWNjZXNzIHRvIHRoZWlyIHByb3BlcnRpZXMuXG4gKiBJdCBhbGxvd3MgZm9yIGR5bmFtaWMgYWRkaXRpb24gb2YgcHJvcGVydGllcyB3aGlsZSBtYWludGFpbmluZyB0eXBlIGluZm9ybWF0aW9uLlxuICogQHN1bW1hcnkgQWNjdW11bGF0ZXMgb2JqZWN0cyBhbmQgbWFpbnRhaW5zIHR5cGUgaW5mb3JtYXRpb24gZm9yIGFjY3VtdWxhdGVkIHByb3BlcnRpZXNcbiAqIEBtZW1iZXJPZiB1dGlsc1xuICovXG5leHBvcnQgY2xhc3MgT2JqZWN0QWNjdW11bGF0b3Ige1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJfX3NpemVcIiwge1xuICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKiBAZGVzY3JpcHRpb24gRXhwYW5kcyB0aGUgYWNjdW11bGF0b3Igd2l0aCBwcm9wZXJ0aWVzIGZyb20gYSBuZXcgb2JqZWN0XG4gICAgICogQHN1bW1hcnkgQWRkcyBuZXcgcHJvcGVydGllcyB0byB0aGUgYWNjdW11bGF0b3JcbiAgICAgKiBAdGVtcGxhdGUgViAtIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QgYmVpbmcgZXhwYW5kZWRcbiAgICAgKiBAcGFyYW0ge1Z9IHZhbHVlIC0gVGhlIG9iamVjdCB0byBleHBhbmQgd2l0aFxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIGV4cGFuZCh2YWx1ZSkge1xuICAgICAgICBPYmplY3QuZW50cmllcyh2YWx1ZSkuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgaywge1xuICAgICAgICAgICAgICAgIGdldDogKCkgPT4gdixcbiAgICAgICAgICAgICAgICBzZXQ6ICh2YWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdiA9IHZhbDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQWNjdW11bGF0ZXMgYSBuZXcgb2JqZWN0IGludG8gdGhlIGFjY3VtdWxhdG9yXG4gICAgICogQHN1bW1hcnkgQWRkcyBwcm9wZXJ0aWVzIGZyb20gYSBuZXcgb2JqZWN0IHRvIHRoZSBhY2N1bXVsYXRvciwgbWFpbnRhaW5pbmcgdHlwZSBpbmZvcm1hdGlvblxuICAgICAqIEB0ZW1wbGF0ZSBWIC0gVGhlIHR5cGUgb2YgdGhlIG9iamVjdCBiZWluZyBhY2N1bXVsYXRlZFxuICAgICAqIEBwYXJhbSB7Vn0gdmFsdWUgLSBUaGUgb2JqZWN0IHRvIGFjY3VtdWxhdGVcbiAgICAgKiBAcmV0dXJucyBBIG5ldyBPYmplY3RBY2N1bXVsYXRvciBpbnN0YW5jZSB3aXRoIHVwZGF0ZWQgdHlwZSBpbmZvcm1hdGlvblxuICAgICAqIEBtZXJtYWlkXG4gICAgICogc2VxdWVuY2VEaWFncmFtXG4gICAgICogICBwYXJ0aWNpcGFudCBBIGFzIEFjY3VtdWxhdG9yXG4gICAgICogICBwYXJ0aWNpcGFudCBPIGFzIE9iamVjdFxuICAgICAqICAgQS0+Pk86IEdldCBlbnRyaWVzXG4gICAgICogICBsb29wIEZvciBlYWNoIGVudHJ5XG4gICAgICogICAgIEEtPj5BOiBEZWZpbmUgcHJvcGVydHlcbiAgICAgKiAgIGVuZFxuICAgICAqICAgQS0+PkE6IFVwZGF0ZSBzaXplXG4gICAgICogICBBLT4+QTogUmV0dXJuIHVwZGF0ZWQgYWNjdW11bGF0b3JcbiAgICAgKi9cbiAgICBhY2N1bXVsYXRlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZXhwYW5kKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fX3NpemUgPSB0aGlzLl9fc2l6ZSArIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGEgdmFsdWUgZnJvbSB0aGUgYWNjdW11bGF0b3IgYnkgaXRzIGtleVxuICAgICAqIEBzdW1tYXJ5IEdldHMgYSB2YWx1ZSBmcm9tIHRoZSBhY2N1bXVsYXRlZCBvYmplY3QgdXNpbmcgYSB0eXBlLXNhZmUga2V5XG4gICAgICogQHRlbXBsYXRlIFQgLSB2YWx1ZSB0eXBlXG4gICAgICogQHRlbXBsYXRlIEsgLSBUaGUga2V5IHR5cGUsIG11c3QgYmUgYSBrZXkgb2YgdGhpc1xuICAgICAqIEBwYXJhbSB7S30ga2V5IC0gVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmV0cmlldmVcbiAgICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXlcbiAgICAgKi9cbiAgICBnZXQoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbiB0aGlzKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5ICR7a2V5fSBkb2VzIG5vdCBleGlzdCBpbiBhY2N1bXVsYXRvci4gQXZhaWxhYmxlIGtleXM6ICR7dGhpcy5rZXlzKCkuam9pbihcIiwgXCIpfWApO1xuICAgICAgICByZXR1cm4gdGhpc1trZXldO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGEgdmFsdWUgZnJvbSB0aGUgYWNjdW11bGF0b3IgYnkgaXRzIGtleVxuICAgICAqIEBzdW1tYXJ5IEdldHMgYSB2YWx1ZSBmcm9tIHRoZSBhY2N1bXVsYXRlZCBvYmplY3QgdXNpbmcgYSB0eXBlLXNhZmUga2V5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJldHJpZXZlXG4gICAgICogQHBhcmFtIHthbnl9IHZhbHVlIC0gVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmV0cmlldmVcbiAgICAgKi9cbiAgICBwdXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hY2N1bXVsYXRlKHsgW2tleV06IHZhbHVlIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIGEga2V5IGV4aXN0cyBpbiB0aGUgYWNjdW11bGF0b3JcbiAgICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjY3VtdWxhdG9yIGNvbnRhaW5zIGEgc3BlY2lmaWMga2V5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgdG8gY2hlY2sgZm9yIGV4aXN0ZW5jZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBrZXkgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2VcbiAgICAgKi9cbiAgICBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIXRoaXNba2V5XTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJlbW92ZXMgYSBrZXktdmFsdWUgcGFpciBmcm9tIHRoZSBhY2N1bXVsYXRvclxuICAgICAqIEBzdW1tYXJ5IERlbGV0ZXMgYSBwcm9wZXJ0eSBmcm9tIHRoZSBhY2N1bXVsYXRlZCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gcmVtb3ZlXG4gICAgICogQHJldHVybnMge30gVGhlIGFjY3VtdWxhdG9yIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSByZW1vdmVkXG4gICAgICovXG4gICAgcmVtb3ZlKGtleSkge1xuICAgICAgICBpZiAoIShrZXkgaW4gdGhpcykpXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgZGVsZXRlIHRoaXNba2V5XTtcbiAgICAgICAgdGhpcy5fX3NpemUtLTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYWxsIGtleXMgZnJvbSB0aGUgYWNjdW11bGF0b3JcbiAgICAgKiBAc3VtbWFyeSBHZXRzIGFuIGFycmF5IG9mIGFsbCBhY2N1bXVsYXRlZCBwcm9wZXJ0eSBrZXlzXG4gICAgICogQHJldHVybnMge3N0cmluZ1tdfSBBbiBhcnJheSBvZiBrZXlzIGFzIHN0cmluZ3NcbiAgICAgKi9cbiAgICBrZXlzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYWxsIHZhbHVlcyBmcm9tIHRoZSBhY2N1bXVsYXRvclxuICAgICAqIEBzdW1tYXJ5IEdldHMgYW4gYXJyYXkgb2YgYWxsIGFjY3VtdWxhdGVkIHByb3BlcnR5IHZhbHVlc1xuICAgICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHZhbHVlc1xuICAgICAqL1xuICAgIHZhbHVlcygpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXRzIHRoZSBudW1iZXIgb2Yga2V5LXZhbHVlIHBhaXJzIGluIHRoZSBhY2N1bXVsYXRvclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIGNvdW50IG9mIGFjY3VtdWxhdGVkIHByb3BlcnRpZXNcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGtleS12YWx1ZSBwYWlyc1xuICAgICAqL1xuICAgIHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fc2l6ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENsZWFycyBhbGwgYWNjdW11bGF0ZWQga2V5LXZhbHVlIHBhaXJzXG4gICAgICogQHN1bW1hcnkgUmVtb3ZlcyBhbGwgcHJvcGVydGllcyBmcm9tIHRoZSBhY2N1bXVsYXRvciBhbmQgcmV0dXJucyBhIG5ldyBlbXB0eSBpbnN0YW5jZVxuICAgICAqIEByZXR1cm5zIHtPYmplY3RBY2N1bXVsYXRvcjxuZXZlcj59IEEgbmV3IGVtcHR5IE9iamVjdEFjY3VtdWxhdG9yIGluc3RhbmNlXG4gICAgICovXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JqZWN0QWNjdW11bGF0b3IoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEV4ZWN1dGVzIGEgY2FsbGJhY2sgZm9yIGVhY2gga2V5LXZhbHVlIHBhaXIgaW4gdGhlIGFjY3VtdWxhdG9yXG4gICAgICogQHN1bW1hcnkgSXRlcmF0ZXMgb3ZlciBhbGwgYWNjdW11bGF0ZWQgcHJvcGVydGllcywgY2FsbGluZyBhIGZ1bmN0aW9uIGZvciBlYWNoXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbihhbnksIHN0cmluZywgbnVtYmVyKTogdm9pZH0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdG8gZXhlY3V0ZSBmb3IgZWFjaCBlbnRyeVxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIGZvckVhY2goY2FsbGJhY2spIHtcbiAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdLCBpKSA9PiBjYWxsYmFjayh2YWx1ZSwga2V5LCBpKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbmV3IGFycmF5IHdpdGggdGhlIHJlc3VsdHMgb2YgY2FsbGluZyBhIHByb3ZpZGVkIGZ1bmN0aW9uIG9uIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIGFjY3VtdWxhdG9yXG4gICAgICogQHN1bW1hcnkgTWFwcyBlYWNoIGFjY3VtdWxhdGVkIHByb3BlcnR5IHRvIGEgbmV3IHZhbHVlIHVzaW5nIGEgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICAgKiBAdGVtcGxhdGUgUiAtIFRoZSB0eXBlIG9mIHRoZSBtYXBwZWQgdmFsdWVzXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbihhbnksIHN0cmluZyxudW1iZXIpOiBSfSBjYWxsYmFjayAtIEZ1bmN0aW9uIHRoYXQgcHJvZHVjZXMgYW4gZWxlbWVudCBvZiB0aGUgbmV3IGFycmF5XG4gICAgICogQHJldHVybnMge1JbXX0gQSBuZXcgYXJyYXkgd2l0aCBlYWNoIGVsZW1lbnQgYmVpbmcgdGhlIHJlc3VsdCBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICAgKi9cbiAgICBtYXAoY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMpLm1hcCgoW2tleSwgdmFsdWVdLCBpKSA9PiBjYWxsYmFjayh2YWx1ZSwga2V5LCBpKSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWVdOamRXMTFiR0YwYjNJdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOXpjbU12WVdOamRXMTFiR0YwYjNJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJRVUU3T3pzN096czdSMEZQUnp0QlFVTklMRTFCUVUwc1QwRkJUeXhwUWtGQmFVSTdTVUZSTlVJN1VVRkRSU3hOUVVGTkxFTkJRVU1zWTBGQll5eERRVUZETEVsQlFVa3NSVUZCUlN4UlFVRlJMRVZCUVVVN1dVRkRjRU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdXVUZEVWl4UlFVRlJMRVZCUVVVc1NVRkJTVHRaUVVOa0xGbEJRVmtzUlVGQlJTeExRVUZMTzFsQlEyNUNMRlZCUVZVc1JVRkJSU3hMUVVGTE8xTkJRMnhDTEVOQlFVTXNRMEZCUXp0SlFVTk1MRU5CUVVNN1NVRkZSRHM3T3pzN096dFBRVTlITzBsQlEwOHNUVUZCVFN4RFFVRnRRaXhMUVVGUk8xRkJRM3BETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU4yUXl4TlFVRk5MRU5CUVVNc1kwRkJZeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVWQlFVVTdaMEpCUXpkQ0xFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNRMEZCUXl4RFFVRkRPMmRDUVVOYUxFZEJRVWNzUlVGQlJTeERRVUZETEVkQlFXVXNSVUZCUlN4RlFVRkZPMjlDUVVOMlFpeERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRPMmRDUVVOV0xFTkJRVU03WjBKQlEwUXNXVUZCV1N4RlFVRkZMRWxCUVVrN1owSkJRMnhDTEZWQlFWVXNSVUZCUlN4SlFVRkpPMkZCUTJwQ0xFTkJRVU1zUTBGQlF6dFJRVU5NTEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUTB3c1EwRkJRenRKUVVWRU96czdPenM3T3pzN096czdPenM3TzA5QlowSkhPMGxCUTBnc1ZVRkJWU3hEUVVGdFFpeExRVUZSTzFGQlEyNURMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdVVUZEYmtJc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRPMUZCUTNSRUxFOUJRVThzU1VGQmJVUXNRMEZCUXp0SlFVTTNSQ3hEUVVGRE8wbEJSVVE3T3pzN096czdUMEZQUnp0SlFVTklMRWRCUVVjc1EwRkJiMElzUjBGQlRUdFJRVU16UWl4SlFVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzU1VGQlNTeERRVUZETzFsQlEyaENMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRMklzVDBGQlR5eEhRVUZoTEcxRVFVRnRSQ3hKUVVGSkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVTnlSaXhKUVVGSkxFTkJRMHdzUlVGQlJTeERRVU5LTEVOQlFVTTdVVUZEU2l4UFFVRlJMRWxCUVZrc1EwRkJReXhIUVVGUkxFTkJRVk1zUTBGQlF6dEpRVU42UXl4RFFVRkRPMGxCUlVRN096czdPMDlCUzBjN1NVRkRTQ3hIUVVGSExFTkJRVU1zUjBGQlZ5eEZRVUZGTEV0QlFWVTdVVUZEZWtJc1QwRkJUeXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hMUVVGTExFVkJRVVVzUTBGQlF5eERRVUZETzBsQlF6TkRMRU5CUVVNN1NVRkZSRHM3T3pzN1QwRkxSenRKUVVOSUxFZEJRVWNzUTBGQlF5eEhRVUZYTzFGQlEySXNUMEZCVHl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRV2xDTEVOQlFVTXNRMEZCUXp0SlFVTnVReXhEUVVGRE8wbEJSVVE3T3pzN08wOUJTMGM3U1VGRFNDeE5RVUZOTEVOQlEwb3NSMEZCZDBJN1VVRkplRUlzU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRWxCUVVrc1EwRkJRenRaUVVGRkxFOUJRVThzU1VGQlNTeERRVUZETzFGQlJXaERMRTlCUVU4c1NVRkJTU3hEUVVGRExFZEJRV2xDTEVOQlFVTXNRMEZCUXp0UlFVTXZRaXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdVVUZEWkN4UFFVRlBMRWxCUTI5RExFTkJRVU03U1VGRE9VTXNRMEZCUXp0SlFVVkVPenM3TzA5QlNVYzdTVUZEU0N4SlFVRkpPMUZCUTBZc1QwRkJUeXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMGxCUXpOQ0xFTkJRVU03U1VGRlJEczdPenRQUVVsSE8wbEJRMGdzVFVGQlRUdFJRVU5LTEU5QlFVOHNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVU0zUWl4RFFVRkRPMGxCUlVRN096czdUMEZKUnp0SlFVTklMRWxCUVVrN1VVRkRSaXhQUVVGUExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTTdTVUZEY2tJc1EwRkJRenRKUVVWRU96czdPMDlCU1VjN1NVRkRTQ3hMUVVGTE8xRkJRMGdzVDBGQlR5eEpRVUZKTEdsQ1FVRnBRaXhGUVVGRkxFTkJRVU03U1VGRGFrTXNRMEZCUXp0SlFVVkVPenM3T3p0UFFVdEhPMGxCUTBnc1QwRkJUeXhEUVVOTUxGRkJRWFZGTzFGQlJYWkZMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUzBGQlN5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkRMME1zVVVGQlVTeERRVUZETEV0QlFVc3NSVUZCUlN4SFFVRnBRaXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVU4wUXl4RFFVRkRPMGxCUTBvc1EwRkJRenRKUVVWRU96czdPenM3VDBGTlJ6dEpRVU5JTEVkQlFVY3NRMEZEUkN4UlFVRnZSVHRSUVVWd1JTeFBRVUZQTEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1MwRkJTeXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZEYkVRc1VVRkJVU3hEUVVGRExFdEJRVXNzUlVGQlJTeEhRVUZwUWl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVOMFF5eERRVUZETzBsQlEwb3NRMEZCUXp0RFFVTkdJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJBWTJ4aGMzTWdUMkpxWldOMFFXTmpkVzExYkdGMGIzSmNiaUFxSUVCMFpXMXdiR0YwWlNCVUlDMGdWR2hsSUhSNWNHVWdiMllnZEdobElHRmpZM1Z0ZFd4aGRHVmtJRzlpYW1WamRDd2daWGgwWlc1a2N5QnZZbXBsWTNSY2JpQXFJRUJrWlhOamNtbHdkR2x2YmlCQklHTnNZWE56SUhSb1lYUWdZV05qZFcxMWJHRjBaWE1nYjJKcVpXTjBjeUJoYm1RZ2NISnZkbWxrWlhNZ2RIbHdaUzF6WVdabElHRmpZMlZ6Y3lCMGJ5QjBhR1ZwY2lCd2NtOXdaWEowYVdWekxseHVJQ29nU1hRZ1lXeHNiM2R6SUdadmNpQmtlVzVoYldsaklHRmtaR2wwYVc5dUlHOW1JSEJ5YjNCbGNuUnBaWE1nZDJocGJHVWdiV0ZwYm5SaGFXNXBibWNnZEhsd1pTQnBibVp2Y20xaGRHbHZiaTVjYmlBcUlFQnpkVzF0WVhKNUlFRmpZM1Z0ZFd4aGRHVnpJRzlpYW1WamRITWdZVzVrSUcxaGFXNTBZV2x1Y3lCMGVYQmxJR2x1Wm05eWJXRjBhVzl1SUdadmNpQmhZMk4xYlhWc1lYUmxaQ0J3Y205d1pYSjBhV1Z6WEc0Z0tpQkFiV1Z0WW1WeVQyWWdkWFJwYkhOY2JpQXFMMXh1Wlhod2IzSjBJR05zWVhOeklFOWlhbVZqZEVGalkzVnRkV3hoZEc5eVBGUWdaWGgwWlc1a2N5QnZZbXBsWTNRK0lIdGNiaUFnTHlvcVhHNGdJQ0FxSUVCd2NtbDJZWFJsWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCVWFHVWdjMmw2WlNCdlppQjBhR1VnWVdOamRXMTFiR0YwWldRZ2IySnFaV04wWEc0Z0lDQXFJRUIwZVhCbElIdHVkVzFpWlhKOVhHNGdJQ0FxTDF4dUlDQndjbWwyWVhSbElGOWZjMmw2WlNFNklHNTFiV0psY2p0Y2JseHVJQ0JqYjI1emRISjFZM1J2Y2lncElIdGNiaUFnSUNCUFltcGxZM1F1WkdWbWFXNWxVSEp2Y0dWeWRIa29kR2hwY3l3Z1hDSmZYM05wZW1WY0lpd2dlMXh1SUNBZ0lDQWdkbUZzZFdVNklEQXNYRzRnSUNBZ0lDQjNjbWwwWVdKc1pUb2dkSEoxWlN4Y2JpQWdJQ0FnSUdOdmJtWnBaM1Z5WVdKc1pUb2dabUZzYzJVc1hHNGdJQ0FnSUNCbGJuVnRaWEpoWW14bE9pQm1ZV3h6WlN4Y2JpQWdJQ0I5S1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjSEp2ZEdWamRHVmtYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJGZUhCaGJtUnpJSFJvWlNCaFkyTjFiWFZzWVhSdmNpQjNhWFJvSUhCeWIzQmxjblJwWlhNZ1puSnZiU0JoSUc1bGR5QnZZbXBsWTNSY2JpQWdJQ29nUUhOMWJXMWhjbmtnUVdSa2N5QnVaWGNnY0hKdmNHVnlkR2xsY3lCMGJ5QjBhR1VnWVdOamRXMTFiR0YwYjNKY2JpQWdJQ29nUUhSbGJYQnNZWFJsSUZZZ0xTQlVhR1VnZEhsd1pTQnZaaUIwYUdVZ2IySnFaV04wSUdKbGFXNW5JR1Y0Y0dGdVpHVmtYRzRnSUNBcUlFQndZWEpoYlNCN1ZuMGdkbUZzZFdVZ0xTQlVhR1VnYjJKcVpXTjBJSFJ2SUdWNGNHRnVaQ0IzYVhSb1hHNGdJQ0FxSUVCeVpYUjFjbTV6SUh0MmIybGtmVnh1SUNBZ0tpOWNiaUFnY0hKdmRHVmpkR1ZrSUdWNGNHRnVaRHhXSUdWNGRHVnVaSE1nYjJKcVpXTjBQaWgyWVd4MVpUb2dWaWs2SUhadmFXUWdlMXh1SUNBZ0lFOWlhbVZqZEM1bGJuUnlhV1Z6S0haaGJIVmxLUzVtYjNKRllXTm9LQ2hiYXl3Z2RsMHBJRDArSUh0Y2JpQWdJQ0FnSUU5aWFtVmpkQzVrWldacGJtVlFjbTl3WlhKMGVTaDBhR2x6TENCckxDQjdYRzRnSUNBZ0lDQWdJR2RsZERvZ0tDa2dQVDRnZGl4Y2JpQWdJQ0FnSUNBZ2MyVjBPaUFvZG1Gc09pQldXMnRsZVc5bUlGWmRLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdkaUE5SUhaaGJEdGNiaUFnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnWTI5dVptbG5kWEpoWW14bE9pQjBjblZsTEZ4dUlDQWdJQ0FnSUNCbGJuVnRaWEpoWW14bE9pQjBjblZsTEZ4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnZlNrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUVGalkzVnRkV3hoZEdWeklHRWdibVYzSUc5aWFtVmpkQ0JwYm5SdklIUm9aU0JoWTJOMWJYVnNZWFJ2Y2x4dUlDQWdLaUJBYzNWdGJXRnllU0JCWkdSeklIQnliM0JsY25ScFpYTWdabkp2YlNCaElHNWxkeUJ2WW1wbFkzUWdkRzhnZEdobElHRmpZM1Z0ZFd4aGRHOXlMQ0J0WVdsdWRHRnBibWx1WnlCMGVYQmxJR2x1Wm05eWJXRjBhVzl1WEc0Z0lDQXFJRUIwWlcxd2JHRjBaU0JXSUMwZ1ZHaGxJSFI1Y0dVZ2IyWWdkR2hsSUc5aWFtVmpkQ0JpWldsdVp5QmhZMk4xYlhWc1lYUmxaRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UxWjlJSFpoYkhWbElDMGdWR2hsSUc5aWFtVmpkQ0IwYnlCaFkyTjFiWFZzWVhSbFhHNGdJQ0FxSUVCeVpYUjFjbTV6SUVFZ2JtVjNJRTlpYW1WamRFRmpZM1Z0ZFd4aGRHOXlJR2x1YzNSaGJtTmxJSGRwZEdnZ2RYQmtZWFJsWkNCMGVYQmxJR2x1Wm05eWJXRjBhVzl1WEc0Z0lDQXFJRUJ0WlhKdFlXbGtYRzRnSUNBcUlITmxjWFZsYm1ObFJHbGhaM0poYlZ4dUlDQWdLaUFnSUhCaGNuUnBZMmx3WVc1MElFRWdZWE1nUVdOamRXMTFiR0YwYjNKY2JpQWdJQ29nSUNCd1lYSjBhV05wY0dGdWRDQlBJR0Z6SUU5aWFtVmpkRnh1SUNBZ0tpQWdJRUV0UGo1UE9pQkhaWFFnWlc1MGNtbGxjMXh1SUNBZ0tpQWdJR3h2YjNBZ1JtOXlJR1ZoWTJnZ1pXNTBjbmxjYmlBZ0lDb2dJQ0FnSUVFdFBqNUJPaUJFWldacGJtVWdjSEp2Y0dWeWRIbGNiaUFnSUNvZ0lDQmxibVJjYmlBZ0lDb2dJQ0JCTFQ0K1FUb2dWWEJrWVhSbElITnBlbVZjYmlBZ0lDb2dJQ0JCTFQ0K1FUb2dVbVYwZFhKdUlIVndaR0YwWldRZ1lXTmpkVzExYkdGMGIzSmNiaUFnSUNvdlhHNGdJR0ZqWTNWdGRXeGhkR1U4VmlCbGVIUmxibVJ6SUc5aWFtVmpkRDRvZG1Gc2RXVTZJRllwT2lCVUlDWWdWaUFtSUU5aWFtVmpkRUZqWTNWdGRXeGhkRzl5UEZRZ0ppQldQaUI3WEc0Z0lDQWdkR2hwY3k1bGVIQmhibVFvZG1Gc2RXVXBPMXh1SUNBZ0lIUm9hWE11WDE5emFYcGxJRDBnZEdocGN5NWZYM05wZW1VZ0t5QlBZbXBsWTNRdWEyVjVjeWgyWVd4MVpTa3ViR1Z1WjNSb08xeHVJQ0FnSUhKbGRIVnliaUIwYUdseklHRnpJSFZ1YTI1dmQyNGdZWE1nVkNBbUlGWWdKaUJQWW1wbFkzUkJZMk4xYlhWc1lYUnZjanhVSUNZZ1ZqNDdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlGSmxkSEpwWlhabGN5QmhJSFpoYkhWbElHWnliMjBnZEdobElHRmpZM1Z0ZFd4aGRHOXlJR0o1SUdsMGN5QnJaWGxjYmlBZ0lDb2dRSE4xYlcxaGNua2dSMlYwY3lCaElIWmhiSFZsSUdaeWIyMGdkR2hsSUdGalkzVnRkV3hoZEdWa0lHOWlhbVZqZENCMWMybHVaeUJoSUhSNWNHVXRjMkZtWlNCclpYbGNiaUFnSUNvZ1FIUmxiWEJzWVhSbElGUWdMU0IyWVd4MVpTQjBlWEJsWEc0Z0lDQXFJRUIwWlcxd2JHRjBaU0JMSUMwZ1ZHaGxJR3RsZVNCMGVYQmxMQ0J0ZFhOMElHSmxJR0VnYTJWNUlHOW1JSFJvYVhOY2JpQWdJQ29nUUhCaGNtRnRJSHRMZlNCclpYa2dMU0JVYUdVZ2EyVjVJRzltSUhSb1pTQjJZV3gxWlNCMGJ5QnlaWFJ5YVdWMlpWeHVJQ0FnS2lCQWNtVjBkWEp1Y3lCVWFHVWdkbUZzZFdVZ1lYTnpiMk5wWVhSbFpDQjNhWFJvSUhSb1pTQnJaWGxjYmlBZ0lDb3ZYRzRnSUdkbGREeExJR1Y0ZEdWdVpITWdhMlY1YjJZZ1ZENG9hMlY1T2lCTEtUb2dWRnRMWFNCN1hHNGdJQ0FnYVdZZ0tDRW9hMlY1SUdsdUlIUm9hWE1wS1Z4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLRnh1SUNBZ0lDQWdJQ0JnUzJWNUlDUjdhMlY1SUdGeklITjBjbWx1WjMwZ1pHOWxjeUJ1YjNRZ1pYaHBjM1FnYVc0Z1lXTmpkVzExYkdGMGIzSXVJRUYyWVdsc1lXSnNaU0JyWlhsek9pQWtlM1JvYVhNdWEyVjVjeWdwTG1wdmFXNG9YRzRnSUNBZ0lDQWdJQ0FnWENJc0lGd2lYRzRnSUNBZ0lDQWdJQ2w5WUZ4dUlDQWdJQ0FnS1R0Y2JpQWdJQ0J5WlhSMWNtNGdLSFJvYVhNZ1lYTWdZVzU1S1Z0clpYa2dZWE1nUzEwZ1lYTWdWRnRMWFR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnVW1WMGNtbGxkbVZ6SUdFZ2RtRnNkV1VnWm5KdmJTQjBhR1VnWVdOamRXMTFiR0YwYjNJZ1lua2dhWFJ6SUd0bGVWeHVJQ0FnS2lCQWMzVnRiV0Z5ZVNCSFpYUnpJR0VnZG1Gc2RXVWdabkp2YlNCMGFHVWdZV05qZFcxMWJHRjBaV1FnYjJKcVpXTjBJSFZ6YVc1bklHRWdkSGx3WlMxellXWmxJR3RsZVZ4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdhMlY1SUMwZ1ZHaGxJR3RsZVNCdlppQjBhR1VnZG1Gc2RXVWdkRzhnY21WMGNtbGxkbVZjYmlBZ0lDb2dRSEJoY21GdElIdGhibmw5SUhaaGJIVmxJQzBnVkdobElHdGxlU0J2WmlCMGFHVWdkbUZzZFdVZ2RHOGdjbVYwY21sbGRtVmNiaUFnSUNvdlhHNGdJSEIxZENoclpYazZJSE4wY21sdVp5d2dkbUZzZFdVNklHRnVlU2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG1GalkzVnRkV3hoZEdVb2V5QmJhMlY1WFRvZ2RtRnNkV1VnZlNrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUVOb1pXTnJjeUJwWmlCaElHdGxlU0JsZUdsemRITWdhVzRnZEdobElHRmpZM1Z0ZFd4aGRHOXlYRzRnSUNBcUlFQnpkVzF0WVhKNUlFUmxkR1Z5YldsdVpYTWdkMmhsZEdobGNpQjBhR1VnWVdOamRXMTFiR0YwYjNJZ1kyOXVkR0ZwYm5NZ1lTQnpjR1ZqYVdacFl5QnJaWGxjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHdGxlU0F0SUZSb1pTQnJaWGtnZEc4Z1kyaGxZMnNnWm05eUlHVjRhWE4wWlc1alpWeHVJQ0FnS2lCQWNtVjBkWEp1Y3lCN1ltOXZiR1ZoYm4wZ1ZISjFaU0JwWmlCMGFHVWdhMlY1SUdWNGFYTjBjeXdnWm1Gc2MyVWdiM1JvWlhKM2FYTmxYRzRnSUNBcUwxeHVJQ0JvWVhNb2EyVjVPaUJ6ZEhKcGJtY3BPaUJpYjI5c1pXRnVJSHRjYmlBZ0lDQnlaWFIxY200Z0lTRjBhR2x6VzJ0bGVTQmhjeUJyWlhsdlppQjBhR2x6WFR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnVW1WdGIzWmxjeUJoSUd0bGVTMTJZV3gxWlNCd1lXbHlJR1p5YjIwZ2RHaGxJR0ZqWTNWdGRXeGhkRzl5WEc0Z0lDQXFJRUJ6ZFcxdFlYSjVJRVJsYkdWMFpYTWdZU0J3Y205d1pYSjBlU0JtY205dElIUm9aU0JoWTJOMWJYVnNZWFJsWkNCdlltcGxZM1JjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHdGxlU0F0SUZSb1pTQnJaWGtnYjJZZ2RHaGxJSEJ5YjNCbGNuUjVJSFJ2SUhKbGJXOTJaVnh1SUNBZ0tpQkFjbVYwZFhKdWN5QjdmU0JVYUdVZ1lXTmpkVzExYkdGMGIzSWdhVzV6ZEdGdVkyVWdkMmwwYUNCMGFHVWdjM0JsWTJsbWFXVmtJSEJ5YjNCbGNuUjVJSEpsYlc5MlpXUmNiaUFnSUNvdlhHNGdJSEpsYlc5MlpTaGNiaUFnSUNCclpYazZJR3RsZVc5bUlIUm9hWE1nZkNCemRISnBibWRjYmlBZ0tUcGNiaUFnSUNCOElDaFBiV2wwUEhSb2FYTXNJSFI1Y0dWdlppQnJaWGsrSUNZZ1QySnFaV04wUVdOamRXMTFiR0YwYjNJOFQyMXBkRHgwYUdsekxDQjBlWEJsYjJZZ2EyVjVQajRwWEc0Z0lDQWdmQ0IwYUdseklIdGNiaUFnSUNCcFppQW9JU2hyWlhrZ2FXNGdkR2hwY3lrcElISmxkSFZ5YmlCMGFHbHpPMXh1WEc0Z0lDQWdaR1ZzWlhSbElIUm9hWE5iYTJWNUlHRnpJR3RsZVc5bUlIUm9hWE5kTzF4dUlDQWdJSFJvYVhNdVgxOXphWHBsTFMwN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNZ1lYTWdkVzVyYm05M2JpQmhjeUJQYldsMFBIUm9hWE1zSUhSNWNHVnZaaUJyWlhrK0lDWmNiaUFnSUNBZ0lFOWlhbVZqZEVGalkzVnRkV3hoZEc5eVBFOXRhWFE4ZEdocGN5d2dkSGx3Wlc5bUlHdGxlVDQrTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJTWlhSeWFXVjJaWE1nWVd4c0lHdGxlWE1nWm5KdmJTQjBhR1VnWVdOamRXMTFiR0YwYjNKY2JpQWdJQ29nUUhOMWJXMWhjbmtnUjJWMGN5QmhiaUJoY25KaGVTQnZaaUJoYkd3Z1lXTmpkVzExYkdGMFpXUWdjSEp2Y0dWeWRIa2dhMlY1YzF4dUlDQWdLaUJBY21WMGRYSnVjeUI3YzNSeWFXNW5XMTE5SUVGdUlHRnljbUY1SUc5bUlHdGxlWE1nWVhNZ2MzUnlhVzVuYzF4dUlDQWdLaTljYmlBZ2EyVjVjeWdwT2lCemRISnBibWRiWFNCN1hHNGdJQ0FnY21WMGRYSnVJRTlpYW1WamRDNXJaWGx6S0hSb2FYTXBPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQlNaWFJ5YVdWMlpYTWdZV3hzSUhaaGJIVmxjeUJtY205dElIUm9aU0JoWTJOMWJYVnNZWFJ2Y2x4dUlDQWdLaUJBYzNWdGJXRnllU0JIWlhSeklHRnVJR0Z5Y21GNUlHOW1JR0ZzYkNCaFkyTjFiWFZzWVhSbFpDQndjbTl3WlhKMGVTQjJZV3gxWlhOY2JpQWdJQ29nUUhKbGRIVnlibk1nUVc0Z1lYSnlZWGtnYjJZZ2RtRnNkV1Z6WEc0Z0lDQXFMMXh1SUNCMllXeDFaWE1vS1RvZ1ZGdHJaWGx2WmlCVVhWdGRJSHRjYmlBZ0lDQnlaWFIxY200Z1QySnFaV04wTG5aaGJIVmxjeWgwYUdsektUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1IyVjBjeUIwYUdVZ2JuVnRZbVZ5SUc5bUlHdGxlUzEyWVd4MVpTQndZV2x5Y3lCcGJpQjBhR1VnWVdOamRXMTFiR0YwYjNKY2JpQWdJQ29nUUhOMWJXMWhjbmtnVW1WMGRYSnVjeUIwYUdVZ1kyOTFiblFnYjJZZ1lXTmpkVzExYkdGMFpXUWdjSEp2Y0dWeWRHbGxjMXh1SUNBZ0tpQkFjbVYwZFhKdWN5QjdiblZ0WW1WeWZTQlVhR1VnYm5WdFltVnlJRzltSUd0bGVTMTJZV3gxWlNCd1lXbHljMXh1SUNBZ0tpOWNiaUFnYzJsNlpTZ3BPaUJ1ZFcxaVpYSWdlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbDlmYzJsNlpUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1EyeGxZWEp6SUdGc2JDQmhZMk4xYlhWc1lYUmxaQ0JyWlhrdGRtRnNkV1VnY0dGcGNuTmNiaUFnSUNvZ1FITjFiVzFoY25rZ1VtVnRiM1psY3lCaGJHd2djSEp2Y0dWeWRHbGxjeUJtY205dElIUm9aU0JoWTJOMWJYVnNZWFJ2Y2lCaGJtUWdjbVYwZFhKdWN5QmhJRzVsZHlCbGJYQjBlU0JwYm5OMFlXNWpaVnh1SUNBZ0tpQkFjbVYwZFhKdWN5QjdUMkpxWldOMFFXTmpkVzExYkdGMGIzSThibVYyWlhJK2ZTQkJJRzVsZHlCbGJYQjBlU0JQWW1wbFkzUkJZMk4xYlhWc1lYUnZjaUJwYm5OMFlXNWpaVnh1SUNBZ0tpOWNiaUFnWTJ4bFlYSW9LVG9nVDJKcVpXTjBRV05qZFcxMWJHRjBiM0k4Ym1WMlpYSStJSHRjYmlBZ0lDQnlaWFIxY200Z2JtVjNJRTlpYW1WamRFRmpZM1Z0ZFd4aGRHOXlLQ2s3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1FHUmxjMk55YVhCMGFXOXVJRVY0WldOMWRHVnpJR0VnWTJGc2JHSmhZMnNnWm05eUlHVmhZMmdnYTJWNUxYWmhiSFZsSUhCaGFYSWdhVzRnZEdobElHRmpZM1Z0ZFd4aGRHOXlYRzRnSUNBcUlFQnpkVzF0WVhKNUlFbDBaWEpoZEdWeklHOTJaWElnWVd4c0lHRmpZM1Z0ZFd4aGRHVmtJSEJ5YjNCbGNuUnBaWE1zSUdOaGJHeHBibWNnWVNCbWRXNWpkR2x2YmlCbWIzSWdaV0ZqYUZ4dUlDQWdLaUJBY0dGeVlXMGdlMloxYm1OMGFXOXVLR0Z1ZVN3Z2MzUnlhVzVuTENCdWRXMWlaWElwT2lCMmIybGtmU0JqWVd4c1ltRmpheUF0SUZSb1pTQm1kVzVqZEdsdmJpQjBieUJsZUdWamRYUmxJR1p2Y2lCbFlXTm9JR1Z1ZEhKNVhHNGdJQ0FxSUVCeVpYUjFjbTV6SUh0MmIybGtmVnh1SUNBZ0tpOWNiaUFnWm05eVJXRmphQ2hjYmlBZ0lDQmpZV3hzWW1GamF6b2dLSFpoYkhWbE9pQjBhR2x6VzJ0bGVXOW1JSFJvYVhOZExDQnJaWGs2SUd0bGVXOW1JSFJvYVhNc0lHazZJRzUxYldKbGNpa2dQVDRnZG05cFpGeHVJQ0FwT2lCMmIybGtJSHRjYmlBZ0lDQlBZbXBsWTNRdVpXNTBjbWxsY3loMGFHbHpLUzVtYjNKRllXTm9LQ2hiYTJWNUxDQjJZV3gxWlYwc0lHa3BJRDArWEc0Z0lDQWdJQ0JqWVd4c1ltRmpheWgyWVd4MVpTd2dhMlY1SUdGeklHdGxlVzltSUhSb2FYTXNJR2twWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdRM0psWVhSbGN5QmhJRzVsZHlCaGNuSmhlU0IzYVhSb0lIUm9aU0J5WlhOMWJIUnpJRzltSUdOaGJHeHBibWNnWVNCd2NtOTJhV1JsWkNCbWRXNWpkR2x2YmlCdmJpQmxkbVZ5ZVNCbGJHVnRaVzUwSUdsdUlIUm9aU0JoWTJOMWJYVnNZWFJ2Y2x4dUlDQWdLaUJBYzNWdGJXRnllU0JOWVhCeklHVmhZMmdnWVdOamRXMTFiR0YwWldRZ2NISnZjR1Z5ZEhrZ2RHOGdZU0J1WlhjZ2RtRnNkV1VnZFhOcGJtY2dZU0JqWVd4c1ltRmpheUJtZFc1amRHbHZibHh1SUNBZ0tpQkFkR1Z0Y0d4aGRHVWdVaUF0SUZSb1pTQjBlWEJsSUc5bUlIUm9aU0J0WVhCd1pXUWdkbUZzZFdWelhHNGdJQ0FxSUVCd1lYSmhiU0I3Wm5WdVkzUnBiMjRvWVc1NUxDQnpkSEpwYm1jc2JuVnRZbVZ5S1RvZ1VuMGdZMkZzYkdKaFkyc2dMU0JHZFc1amRHbHZiaUIwYUdGMElIQnliMlIxWTJWeklHRnVJR1ZzWlcxbGJuUWdiMllnZEdobElHNWxkeUJoY25KaGVWeHVJQ0FnS2lCQWNtVjBkWEp1Y3lCN1VsdGRmU0JCSUc1bGR5QmhjbkpoZVNCM2FYUm9JR1ZoWTJnZ1pXeGxiV1Z1ZENCaVpXbHVaeUIwYUdVZ2NtVnpkV3gwSUc5bUlIUm9aU0JqWVd4c1ltRmpheUJtZFc1amRHbHZibHh1SUNBZ0tpOWNiaUFnYldGd1BGSStLRnh1SUNBZ0lHTmhiR3hpWVdOck9pQW9kbUZzZFdVNklIUm9hWE5iYTJWNWIyWWdkR2hwYzEwc0lHdGxlVG9nYTJWNWIyWWdkR2hwY3l3Z2FUb2diblZ0WW1WeUtTQTlQaUJTWEc0Z0lDazZJRkpiWFNCN1hHNGdJQ0FnY21WMGRYSnVJRTlpYW1WamRDNWxiblJ5YVdWektIUm9hWE1wTG0xaGNDZ29XMnRsZVN3Z2RtRnNkV1ZkTENCcEtTQTlQbHh1SUNBZ0lDQWdZMkZzYkdKaFkyc29kbUZzZFdVc0lHdGxlU0JoY3lCclpYbHZaaUIwYUdsekxDQnBLVnh1SUNBZ0lDazdYRzRnSUgxY2JuMWNiaUpkZlE9PSIsImltcG9ydCB7IHRvRU5WRm9ybWF0IH0gZnJvbSBcIi4vdGV4dFwiO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IGlzQnJvd3NlciB9IGZyb20gXCIuL3dlYlwiO1xuaW1wb3J0IHsgT2JqZWN0QWNjdW11bGF0b3IgfSBmcm9tIFwidHlwZWQtb2JqZWN0LWFjY3VtdWxhdG9yXCI7XG5cbi8qKlxuICogQGNsYXNzIEVudmlyb25tZW50XG4gKiBAZXh0ZW5kcyB7T2JqZWN0QWNjdW11bGF0b3I8VD59XG4gKiBAdGVtcGxhdGUgVFxuICogQGRlc2NyaXB0aW9uIEEgY2xhc3MgcmVwcmVzZW50aW5nIGFuIGVudmlyb25tZW50IHdpdGggYWNjdW11bGF0aW9uIGNhcGFiaWxpdGllcy5cbiAqIEBzdW1tYXJ5IE1hbmFnZXMgZW52aXJvbm1lbnQtcmVsYXRlZCBkYXRhIGFuZCBwcm92aWRlcyBtZXRob2RzIGZvciBhY2N1bXVsYXRpb24gYW5kIGtleSByZXRyaWV2YWwuXG4gKiBAcGFyYW0ge1R9IFtpbml0aWFsRGF0YV0gLSBUaGUgaW5pdGlhbCBkYXRhIHRvIHBvcHVsYXRlIHRoZSBlbnZpcm9ubWVudCB3aXRoLlxuICovXG5leHBvcnQgY2xhc3MgRW52aXJvbm1lbnQ8VCBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBPYmplY3RBY2N1bXVsYXRvcjxUPiB7XG4gIC8qKlxuICAgKiBAc3RhdGljXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGRlc2NyaXB0aW9uIEEgZmFjdG9yeSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgRW52aXJvbm1lbnQgaW5zdGFuY2VzLlxuICAgKiBAc3VtbWFyeSBEZWZpbmVzIGhvdyBuZXcgaW5zdGFuY2VzIG9mIHRoZSBFbnZpcm9ubWVudCBjbGFzcyBzaG91bGQgYmUgY3JlYXRlZC5cbiAgICogQHJldHVybiB7RW52aXJvbm1lbnQ8YW55Pn0gQSBuZXcgaW5zdGFuY2Ugb2YgdGhlIEVudmlyb25tZW50IGNsYXNzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXRpYyBmYWN0b3J5OiBFbnZpcm9ubWVudEZhY3Rvcnk8YW55LCBhbnk+ID1cbiAgICAoKTogRW52aXJvbm1lbnQ8YW55PiA9PiBuZXcgRW52aXJvbm1lbnQoKTtcblxuICAvKipcbiAgICogQHN0YXRpY1xuICAgKiBAcHJpdmF0ZVxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRW52aXJvbm1lbnQgY2xhc3MuXG4gICAqIEB0eXBlIHtFbnZpcm9ubWVudDxhbnk+fVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBFbnZpcm9ubWVudDxhbnk+O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZyb21FbnYoazogc3RyaW5nKSB7XG4gICAgbGV0IGVudjogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaWYgKGlzQnJvd3NlcigpKSB7XG4gICAgICBlbnYgPSAoZ2xvYmFsVGhpcyBhcyB0eXBlb2YgZ2xvYmFsVGhpcyAmIHsgRU5WOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH0pW1xuICAgICAgICBcIkVOVlwiXG4gICAgICBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnYgPSBnbG9iYWxUaGlzLnByb2Nlc3MuZW52O1xuICAgICAgayA9IHRvRU5WRm9ybWF0KGspO1xuICAgIH1cbiAgICByZXR1cm4gZW52W2tdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGV4cGFuZDxWIGV4dGVuZHMgb2JqZWN0Pih2YWx1ZTogVik6IHZvaWQge1xuICAgIE9iamVjdC5lbnRyaWVzKHZhbHVlKS5mb3JFYWNoKChbaywgdl0pID0+IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrLCB7XG4gICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZyb21FbnYgPSB0aGlzLmZyb21FbnYoayk7XG4gICAgICAgICAgcmV0dXJuIHR5cGVvZiBmcm9tRW52ID09PSBcInVuZGVmaW5lZFwiID8gdiA6IGZyb21FbnY7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogKHZhbDogVltrZXlvZiBWXSkgPT4ge1xuICAgICAgICAgIHYgPSB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQHN0YXRpY1xuICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIG9yIGNyZWF0ZXMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRW52aXJvbm1lbnQgY2xhc3MuXG4gICAqIEBzdW1tYXJ5IEVuc3VyZXMgb25seSBvbmUgaW5zdGFuY2Ugb2YgdGhlIEVudmlyb25tZW50IGNsYXNzIGV4aXN0cy5cbiAgICogQHRlbXBsYXRlIEVcbiAgICogQHBhcmFtIHsuLi51bmtub3duW119IGFyZ3MgLSBBcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgZmFjdG9yeSBmdW5jdGlvbiBpZiBhIG5ldyBpbnN0YW5jZSBpcyBjcmVhdGVkLlxuICAgKiBAcmV0dXJuIHtFfSBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFbnZpcm9ubWVudCBjbGFzcy5cbiAgICovXG4gIHByb3RlY3RlZCBzdGF0aWMgaW5zdGFuY2U8RSBleHRlbmRzIEVudmlyb25tZW50PGFueT4+KC4uLmFyZ3M6IHVua25vd25bXSk6IEUge1xuICAgIEVudmlyb25tZW50Ll9pbnN0YW5jZSA9ICFFbnZpcm9ubWVudC5faW5zdGFuY2VcbiAgICAgID8gRW52aXJvbm1lbnQuZmFjdG9yeSguLi5hcmdzKVxuICAgICAgOiBFbnZpcm9ubWVudC5faW5zdGFuY2U7XG4gICAgcmV0dXJuIEVudmlyb25tZW50Ll9pbnN0YW5jZSBhcyBFO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQGRlc2NyaXB0aW9uIEFjY3VtdWxhdGVzIHRoZSBnaXZlbiB2YWx1ZSBpbnRvIHRoZSBlbnZpcm9ubWVudC5cbiAgICogQHN1bW1hcnkgQWRkcyBuZXcgcHJvcGVydGllcyB0byB0aGUgZW52aXJvbm1lbnQgZnJvbSB0aGUgcHJvdmlkZWQgb2JqZWN0LlxuICAgKiBAdGVtcGxhdGUgVlxuICAgKiBAcGFyYW0ge1Z9IHZhbHVlIC0gVGhlIG9iamVjdCB0byBhY2N1bXVsYXRlIGludG8gdGhlIGVudmlyb25tZW50LlxuICAgKiBAcmV0dXJuIHtWfSBUaGUgdXBkYXRlZCBlbnZpcm9ubWVudCBpbnN0YW5jZS5cbiAgICovXG4gIHN0YXRpYyBhY2N1bXVsYXRlPFYgZXh0ZW5kcyBvYmplY3Q+KFxuICAgIHZhbHVlOiBWXG4gICk6IHR5cGVvZiBFbnZpcm9ubWVudC5faW5zdGFuY2UgJlxuICAgIFYgJlxuICAgIE9iamVjdEFjY3VtdWxhdG9yPHR5cGVvZiBFbnZpcm9ubWVudC5faW5zdGFuY2UgJiBWPiB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBFbnZpcm9ubWVudC5pbnN0YW5jZSgpO1xuICAgIHJldHVybiBpbnN0YW5jZS5hY2N1bXVsYXRlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3RhdGljXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgdGhlIGtleXMgb2YgdGhlIGVudmlyb25tZW50LCBvcHRpb25hbGx5IGNvbnZlcnRpbmcgdGhlbSB0byBFTlYgZm9ybWF0LlxuICAgKiBAc3VtbWFyeSBHZXRzIGFsbCBrZXlzIGluIHRoZSBlbnZpcm9ubWVudCwgd2l0aCBhbiBvcHRpb24gdG8gZm9ybWF0IHRoZW0gZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbdG9FbnY9dHJ1ZV0gLSBXaGV0aGVyIHRvIGNvbnZlcnQgdGhlIGtleXMgdG8gRU5WIGZvcm1hdC5cbiAgICogQHJldHVybiB7c3RyaW5nW119IEFuIGFycmF5IG9mIGtleXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuXG4gICAqL1xuICBzdGF0aWMga2V5cyh0b0VudjogYm9vbGVhbiA9IHRydWUpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIEVudmlyb25tZW50Lmluc3RhbmNlKClcbiAgICAgIC5rZXlzKClcbiAgICAgIC5tYXAoKGspID0+ICh0b0VudiA/IHRvRU5WRm9ybWF0KGspIDogaykpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBQYXJzZUFyZ3NSZXN1bHQgfSBmcm9tIFwiLi4vaW5wdXQvdHlwZXNcIjtcbmltcG9ydCB7IENvbW1hbmRPcHRpb25zIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IFVzZXJJbnB1dCB9IGZyb20gXCIuLi9pbnB1dC9pbnB1dFwiO1xuaW1wb3J0IHsgRGVmYXVsdENvbW1hbmRPcHRpb25zLCBEZWZhdWx0Q29tbWFuZFZhbHVlcyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZ2V0RGVwZW5kZW5jaWVzLCBnZXRQYWNrYWdlVmVyc2lvbiB9IGZyb20gXCIuLi91dGlscy9mc1wiO1xuaW1wb3J0IHsgcHJpbnRCYW5uZXIgfSBmcm9tIFwiLi4vb3V0cHV0L2NvbW1vblwiO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tIFwiLi4vdXRpbHMvZW52aXJvbm1lbnRcIjtcbmltcG9ydCB7XG4gIERlZmF1bHRMb2dnaW5nQ29uZmlnLFxuICBMb2dnZXIsXG4gIExvZ2dpbmcsXG4gIExvZ2dpbmdDb25maWcsXG4gIExvZ0xldmVsLFxufSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcblxuLyoqXG4gKiBAY2xhc3MgQ29tbWFuZFxuICogQGFic3RyYWN0XG4gKiBAdGVtcGxhdGUgSSAtIFRoZSB0eXBlIG9mIGlucHV0IG9wdGlvbnMgZm9yIHRoZSBjb21tYW5kLlxuICogQHRlbXBsYXRlIFIgLSBUaGUgcmV0dXJuIHR5cGUgb2YgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLlxuICogQG1lbWJlck9mIHV0aWxzL2NsaVxuICogQGRlc2NyaXB0aW9uIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGNvbW1hbmQgaW1wbGVtZW50YXRpb24uXG4gKiBAc3VtbWFyeSBQcm92aWRlcyBhIHN0cnVjdHVyZSBmb3IgY3JlYXRpbmcgY29tbWFuZC1saW5lIGludGVyZmFjZSBjb21tYW5kcyB3aXRoIGlucHV0IGhhbmRsaW5nLCBsb2dnaW5nLCBhbmQgZXhlY3V0aW9uIGZsb3cuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgY29tbWFuZC5cbiAqIEBwYXJhbSB7Q29tbWFuZE9wdGlvbnM8ST59IFtpbnB1dHNdIC0gVGhlIGlucHV0IG9wdGlvbnMgZm9yIHRoZSBjb21tYW5kLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gW3JlcXVpcmVtZW50c10gLSBUaGUgbGlzdCBvZiByZXF1aXJlZCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBjb21tYW5kLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29tbWFuZDxJLCBSPiB7XG4gIC8qKlxuICAgKiBAc3RhdGljXG4gICAqIEBkZXNjcmlwdGlvbiBTdGF0aWMgbG9nZ2VyIGZvciB0aGUgQ29tbWFuZCBjbGFzcy5cbiAgICogQHR5cGUge0xvZ2dlcn1cbiAgICovXG4gIHN0YXRpYyBsb2c6IExvZ2dlcjtcblxuICAvKipcbiAgICogQHByb3RlY3RlZFxuICAgKiBAZGVzY3JpcHRpb24gSW5zdGFuY2UgbG9nZ2VyIGZvciB0aGUgY29tbWFuZC5cbiAgICogQHR5cGUge0xvZ2dlcn1cbiAgICovXG4gIHByb3RlY3RlZCBsb2c6IExvZ2dlcjtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIG5hbWU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgaW5wdXRzOiBDb21tYW5kT3B0aW9uczxJPiA9IHt9IGFzIHVua25vd24gYXMgQ29tbWFuZE9wdGlvbnM8ST4sXG4gICAgcHJvdGVjdGVkIHJlcXVpcmVtZW50czogc3RyaW5nW10gPSBbXVxuICApIHtcbiAgICBpZiAoIUNvbW1hbmQubG9nKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29tbWFuZCwgXCJsb2dcIiwge1xuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlOiBMb2dnaW5nLmZvcihDb21tYW5kLm5hbWUpLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmxvZyA9IENvbW1hbmQubG9nO1xuICAgIH1cbiAgICB0aGlzLmxvZyA9IENvbW1hbmQubG9nLmZvcih0aGlzLm5hbWUpO1xuICAgIHRoaXMuaW5wdXRzID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgRGVmYXVsdENvbW1hbmRPcHRpb25zLFxuICAgICAgaW5wdXRzXG4gICAgKSBhcyBDb21tYW5kT3B0aW9uczxJPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBhc3luY1xuICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIGFsbCByZXF1aXJlZCBkZXBlbmRlbmNpZXMgYXJlIHByZXNlbnQuXG4gICAqIEBzdW1tYXJ5IFJldHJpZXZlcyB0aGUgbGlzdCBvZiBkZXBlbmRlbmNpZXMgYW5kIGNvbXBhcmVzIGl0IGFnYWluc3QgdGhlIHJlcXVpcmVkIGRlcGVuZGVuY2llcyBmb3IgdGhlIGNvbW1hbmQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjaGVjayBpcyBjb21wbGV0ZS5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ29tbWFuZFxuICAgKiAgIHBhcnRpY2lwYW50IGdldERlcGVuZGVuY2llc1xuICAgKiAgIHBhcnRpY2lwYW50IFNldFxuICAgKiAgIENvbW1hbmQtPj5nZXREZXBlbmRlbmNpZXM6IENhbGxcbiAgICogICBnZXREZXBlbmRlbmNpZXMtLT4+Q29tbWFuZDogUmV0dXJuIHtwcm9kLCBkZXYsIHBlZXJ9XG4gICAqICAgQ29tbWFuZC0+PlNldDogQ3JlYXRlIFNldCBmcm9tIHByb2QsIGRldiwgcGVlclxuICAgKiAgIFNldC0tPj5Db21tYW5kOiBSZXR1cm4gdW5pcXVlIGRlcGVuZGVuY2llc1xuICAgKiAgIENvbW1hbmQtPj5Db21tYW5kOiBDb21wYXJlIGFnYWluc3QgcmVxdWlyZW1lbnRzXG4gICAqICAgYWx0IE1pc3NpbmcgZGVwZW5kZW5jaWVzXG4gICAqICAgICBDb21tYW5kLT4+Q29tbWFuZDogQWRkIHRvIG1pc3NpbmcgbGlzdFxuICAgKiAgIGVuZFxuICAgKiAgIE5vdGUgb3ZlciBDb21tYW5kOiBJZiBtaXNzaW5nLmxlbmd0aCA+IDAsIGhhbmRsZSBtaXNzaW5nIGRlcGVuZGVuY2llc1xuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGNoZWNrUmVxdWlyZW1lbnRzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgcHJvZCwgZGV2LCBwZWVyIH0gPSBhd2FpdCBnZXREZXBlbmRlbmNpZXMoKTtcbiAgICBjb25zdCBtaXNzaW5nID0gW107XG4gICAgY29uc3QgZnVsbExpc3QgPSBBcnJheS5mcm9tKFxuICAgICAgbmV3IFNldChbLi4ucHJvZCwgLi4uZGV2LCAuLi5wZWVyXSkudmFsdWVzKClcbiAgICApLm1hcCgoZCkgPT4gZC5uYW1lKTtcbiAgICBmb3IgKGNvbnN0IGRlcCBvZiB0aGlzLnJlcXVpcmVtZW50cylcbiAgICAgIGlmICghZnVsbExpc3QuaW5jbHVkZXMoZGVwKSkgbWlzc2luZy5wdXNoKGRlcCk7XG5cbiAgICBpZiAoIW1pc3NpbmcubGVuZ3RoKSByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQHByb3RlY3RlZFxuICAgKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgaGVscCBpbmZvcm1hdGlvbiBmb3IgdGhlIGNvbW1hbmQuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIHNob3VsZCBiZSBvdmVycmlkZGVuIGluIGRlcml2ZWQgY2xhc3NlcyB0byBwcm92aWRlIHNwZWNpZmljIGhlbHAgaW5mb3JtYXRpb24uXG4gICAqIEBwYXJhbSB7UGFyc2VBcmdzUmVzdWx0fSBhcmdzIC0gVGhlIHBhcnNlZCBjb21tYW5kLWxpbmUgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgcHJvdGVjdGVkIGhlbHAoYXJnczogUGFyc2VBcmdzUmVzdWx0KTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMubG9nLmluZm8oXG4gICAgICBgVGhpcyBpcyBoZWxwLiBJJ20gbm8gdXNlIGJlY2F1c2UgSSBzaG91bGQgaGF2ZSBiZWVuIG92ZXJyaWRkZW4uYFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQHByb3RlY3RlZFxuICAgKiBAYWJzdHJhY3RcbiAgICogQGRlc2NyaXB0aW9uIFJ1bnMgdGhlIGNvbW1hbmQgd2l0aCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBzaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gZGVyaXZlZCBjbGFzc2VzIHRvIGRlZmluZSB0aGUgY29tbWFuZCdzIGJlaGF2aW9yLlxuICAgKiBAcGFyYW0ge1BhcnNlQXJnc1Jlc3VsdH0gYW5zd2VycyAtIFRoZSBwYXJzZWQgY29tbWFuZC1saW5lIGFyZ3VtZW50cy5cbiAgICogQHJldHVybnMge1Byb21pc2U8UiB8IHN0cmluZyB8IHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kJ3MgcmVzdWx0LlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJ1bjxSPihcbiAgICBhbnN3ZXJzOiBMb2dnaW5nQ29uZmlnICZcbiAgICAgIHR5cGVvZiBEZWZhdWx0Q29tbWFuZFZhbHVlcyAmIHsgW2sgaW4ga2V5b2YgSV06IHVua25vd24gfVxuICApOiBQcm9taXNlPFIgfCBzdHJpbmcgfCB2b2lkPjtcblxuICAvKipcbiAgICogQGFzeW5jXG4gICAqIEBkZXNjcmlwdGlvbiBFeGVjdXRlcyB0aGUgY29tbWFuZC5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgaGFuZGxlcyB0aGUgb3ZlcmFsbCBleGVjdXRpb24gZmxvdyBvZiB0aGUgY29tbWFuZCwgaW5jbHVkaW5nIHBhcnNpbmcgYXJndW1lbnRzLFxuICAgKiBzZXR0aW5nIHVwIGxvZ2dpbmcsIGNoZWNraW5nIGZvciB2ZXJzaW9uIG9yIGhlbHAgcmVxdWVzdHMsIGFuZCBydW5uaW5nIHRoZSBjb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxSIHwgc3RyaW5nIHwgdm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGNvbW1hbmQncyByZXN1bHQuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IENvbW1hbmRcbiAgICogICBwYXJ0aWNpcGFudCBVc2VySW5wdXRcbiAgICogICBwYXJ0aWNpcGFudCBMb2dnaW5nXG4gICAqICAgcGFydGljaXBhbnQgZ2V0UGFja2FnZVZlcnNpb25cbiAgICogICBwYXJ0aWNpcGFudCBwcmludEJhbm5lclxuICAgKiAgIENvbW1hbmQtPj5Vc2VySW5wdXQ6IHBhcnNlQXJncyhpbnB1dHMpXG4gICAqICAgVXNlcklucHV0LS0+PkNvbW1hbmQ6IFJldHVybiBQYXJzZUFyZ3NSZXN1bHRcbiAgICogICBDb21tYW5kLT4+Q29tbWFuZDogUHJvY2VzcyBvcHRpb25zXG4gICAqICAgQ29tbWFuZC0+PkxvZ2dpbmc6IHNldENvbmZpZyhvcHRpb25zKVxuICAgKiAgIGFsdCB2ZXJzaW9uIHJlcXVlc3RlZFxuICAgKiAgICAgQ29tbWFuZC0+PmdldFBhY2thZ2VWZXJzaW9uOiBDYWxsXG4gICAqICAgICBnZXRQYWNrYWdlVmVyc2lvbi0tPj5Db21tYW5kOiBSZXR1cm4gdmVyc2lvblxuICAgKiAgIGVsc2UgaGVscCByZXF1ZXN0ZWRcbiAgICogICAgIENvbW1hbmQtPj5Db21tYW5kOiBoZWxwKGFyZ3MpXG4gICAqICAgZWxzZSBiYW5uZXIgcmVxdWVzdGVkXG4gICAqICAgICBDb21tYW5kLT4+cHJpbnRCYW5uZXI6IENhbGxcbiAgICogICBlbmRcbiAgICogICBDb21tYW5kLT4+Q29tbWFuZDogcnVuKGFyZ3MpXG4gICAqICAgYWx0IGVycm9yIG9jY3Vyc1xuICAgKiAgICAgQ29tbWFuZC0+PkNvbW1hbmQ6IExvZyBlcnJvclxuICAgKiAgIGVuZFxuICAgKiAgIENvbW1hbmQtLT4+Q29tbWFuZDogUmV0dXJuIHJlc3VsdFxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZSgpOiBQcm9taXNlPFIgfCBzdHJpbmcgfCB2b2lkPiB7XG4gICAgY29uc3QgYXJnczogUGFyc2VBcmdzUmVzdWx0ID0gVXNlcklucHV0LnBhcnNlQXJncyh0aGlzLmlucHV0cyk7XG4gICAgY29uc3QgZW52ID0gRW52aXJvbm1lbnQuYWNjdW11bGF0ZShEZWZhdWx0TG9nZ2luZ0NvbmZpZylcbiAgICAgIC5hY2N1bXVsYXRlKERlZmF1bHRDb21tYW5kVmFsdWVzKVxuICAgICAgLmFjY3VtdWxhdGUoYXJncy52YWx1ZXMpO1xuICAgIGNvbnN0IHsgdGltZXN0YW1wLCB2ZXJib3NlLCB2ZXJzaW9uLCBoZWxwLCBsb2dMZXZlbCwgbG9nU3R5bGUsIGJhbm5lciB9ID1cbiAgICAgIGVudjtcblxuICAgIHRoaXMubG9nLnNldENvbmZpZyh7XG4gICAgICAuLi5lbnYsXG4gICAgICB0aW1lc3RhbXA6ICEhdGltZXN0YW1wLFxuICAgICAgbGV2ZWw6IGxvZ0xldmVsIGFzIExvZ0xldmVsLFxuICAgICAgc3R5bGU6ICEhbG9nU3R5bGUsXG4gICAgICB2ZXJib3NlOiAodmVyYm9zZSBhcyBudW1iZXIpIHx8IDAsXG4gICAgfSk7XG5cbiAgICBpZiAodmVyc2lvbikge1xuICAgICAgcmV0dXJuIGdldFBhY2thZ2VWZXJzaW9uKCk7XG4gICAgfVxuXG4gICAgaWYgKGhlbHApIHtcbiAgICAgIHJldHVybiB0aGlzLmhlbHAoYXJncyk7XG4gICAgfVxuXG4gICAgaWYgKGJhbm5lcilcbiAgICAgIHByaW50QmFubmVyKFxuICAgICAgICB0aGlzLmxvZy5mb3IocHJpbnRCYW5uZXIsIHtcbiAgICAgICAgICB0aW1lc3RhbXA6IGZhbHNlLFxuICAgICAgICAgIHN0eWxlOiBmYWxzZSxcbiAgICAgICAgICBjb250ZXh0OiBmYWxzZSxcbiAgICAgICAgICBsb2dMZXZlbDogZmFsc2UsXG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgbGV0IHJlc3VsdDtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gYXdhaXQgdGhpcy5ydW4oZW52KTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvcihgRXJyb3Igd2hpbGUgcnVubmluZyBwcm92aWRlZCBjbGkgZnVuY3Rpb246ICR7ZX1gKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdCBhcyBSO1xuICB9XG59XG4iLCJpbXBvcnQgaHR0cHMgZnJvbSBcImh0dHBzXCI7XG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEEgc2ltcGxlIEhUVFAgY2xpZW50IGZvciBkb3dubG9hZGluZyBmaWxlcy5cbiAqIEBzdW1tYXJ5IFRoaXMgY2xhc3MgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSB0byBkb3dubG9hZCBmaWxlcyBmcm9tIEhUVFBTIFVSTHMuXG4gKiBJdCB1c2VzIE5vZGUuanMgYnVpbHQtaW4gaHR0cHMgbW9kdWxlIHRvIG1ha2UgcmVxdWVzdHMuXG4gKlxuICogQGNsYXNzXG4gKi9cbmV4cG9ydCBjbGFzcyBIdHRwQ2xpZW50IHtcbiAgcHJvdGVjdGVkIHN0YXRpYyBsb2cgPSBMb2dnaW5nLmZvcihIdHRwQ2xpZW50KTtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEb3dubG9hZHMgYSBmaWxlIGZyb20gYSBnaXZlbiBVUkwuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIHNlbmRzIGEgR0VUIHJlcXVlc3QgdG8gdGhlIHNwZWNpZmllZCBVUkwgYW5kIHJldHVybnMgdGhlIHJlc3BvbnNlIGJvZHkgYXMgYSBzdHJpbmcuXG4gICAqIEl0IGhhbmRsZXMgZGlmZmVyZW50IHNjZW5hcmlvcyBzdWNoIGFzIG5vbi0yMDAgc3RhdHVzIGNvZGVzIGFuZCBuZXR3b3JrIGVycm9ycy5cbiAgICpcbiAgICogQHBhcmFtIHVybCAtIFRoZSBVUkwgb2YgdGhlIGZpbGUgdG8gZG93bmxvYWQuXG4gICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZmlsZSBjb250ZW50IGFzIGEgc3RyaW5nLlxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDbGllbnRcbiAgICogICBwYXJ0aWNpcGFudCBIdHRwQ2xpZW50XG4gICAqICAgcGFydGljaXBhbnQgSFRUUFNcbiAgICogICBwYXJ0aWNpcGFudCBTZXJ2ZXJcbiAgICogICBDbGllbnQtPj5IdHRwQ2xpZW50OiBkb3dubG9hZEZpbGUodXJsKVxuICAgKiAgIEh0dHBDbGllbnQtPj5IVFRQUzogZ2V0KHVybClcbiAgICogICBIVFRQUy0+PlNlcnZlcjogR0VUIHJlcXVlc3RcbiAgICogICBTZXJ2ZXItLT4+SFRUUFM6IFJlc3BvbnNlXG4gICAqICAgSFRUUFMtLT4+SHR0cENsaWVudDogUmVzcG9uc2Ugb2JqZWN0XG4gICAqICAgYWx0IFN0YXR1cyBjb2RlIGlzIDIwMFxuICAgKiAgICAgbG9vcCBGb3IgZWFjaCBkYXRhIGNodW5rXG4gICAqICAgICAgIEhUVFBTLT4+SHR0cENsaWVudDogJ2RhdGEnIGV2ZW50XG4gICAqICAgICAgIEh0dHBDbGllbnQtPj5IdHRwQ2xpZW50OiBBY2N1bXVsYXRlIGRhdGFcbiAgICogICAgIGVuZFxuICAgKiAgICAgSFRUUFMtPj5IdHRwQ2xpZW50OiAnZW5kJyBldmVudFxuICAgKiAgICAgSHR0cENsaWVudC0tPj5DbGllbnQ6IFJlc29sdmUgd2l0aCBkYXRhXG4gICAqICAgZWxzZSBTdGF0dXMgY29kZSBpcyBub3QgMjAwXG4gICAqICAgICBIdHRwQ2xpZW50LS0+PkNsaWVudDogUmVqZWN0IHdpdGggZXJyb3JcbiAgICogICBlbmRcbiAgICovXG4gIHN0YXRpYyBhc3luYyBkb3dubG9hZEZpbGUodXJsOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGZ1bmN0aW9uIHJlcXVlc3QodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdXJsID0gZW5jb2RlVVJJKHVybCk7XG4gICAgICAgIGh0dHBzLmdldCh1cmwsIChyZXMpID0+IHtcbiAgICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgPT09IDMwMSB8fCByZXMuc3RhdHVzQ29kZSA9PT0gMzA3KVxuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3QocmVzLmhlYWRlcnMubG9jYXRpb24gYXMgc3RyaW5nKTtcblxuICAgICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICAgICAgICBIdHRwQ2xpZW50LmxvZy5lcnJvcihcbiAgICAgICAgICAgICAgYEZhaWxlZCB0byBmZXRjaCAke3VybH0gKHN0YXR1czogJHtyZXMuc3RhdHVzQ29kZX0pYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggJHt1cmx9YCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgZGF0YSA9IFwiXCI7XG4gICAgICAgICAgcmVzLm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IHtcbiAgICAgICAgICAgIGRhdGEgKz0gY2h1bms7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmVzLm9uKFwiZXJyb3JcIiwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmVzLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmVxdWVzdCh1cmwpO1xuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcIi4uL2NvbW1hbmRcIjtcbmltcG9ydCB7IENvbW1hbmRPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBEZWZhdWx0Q29tbWFuZE9wdGlvbnMsIERlZmF1bHRDb21tYW5kVmFsdWVzIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHtcbiAgY29weUZpbGUsXG4gIGRlbGV0ZVBhdGgsXG4gIGdldEFsbEZpbGVzLFxuICBnZXRQYWNrYWdlLFxuICBwYXRjaEZpbGUsXG4gIHJlYWRGaWxlLFxuICByZW5hbWVGaWxlLFxuICBydW5Db21tYW5kLFxuICB3cml0ZUZpbGUsXG59IGZyb20gXCIuLi8uLi91dGlsc1wiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IElucHV0T3B0aW9ucywgT3V0cHV0T3B0aW9ucywgcm9sbHVwLCBSb2xsdXBCdWlsZCB9IGZyb20gXCJyb2xsdXBcIjtcbmltcG9ydCB0eXBlc2NyaXB0IGZyb20gXCJAcm9sbHVwL3BsdWdpbi10eXBlc2NyaXB0XCI7XG5pbXBvcnQgY29tbW9uanMgZnJvbSBcIkByb2xsdXAvcGx1Z2luLWNvbW1vbmpzXCI7XG5pbXBvcnQgeyBub2RlUmVzb2x2ZSB9IGZyb20gXCJAcm9sbHVwL3BsdWdpbi1ub2RlLXJlc29sdmVcIjtcbmltcG9ydCBqc29uIGZyb20gXCJAcm9sbHVwL3BsdWdpbi1qc29uXCI7XG5pbXBvcnQgeyBMb2dnaW5nQ29uZmlnIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5pbXBvcnQgKiBhcyB0cyBmcm9tIFwidHlwZXNjcmlwdFwiO1xuaW1wb3J0IHsgRGlhZ25vc3RpYywgRW1pdFJlc3VsdCwgTW9kdWxlS2luZCwgU291cmNlRmlsZSB9IGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5cbmNvbnN0IFZFUlNJT05fU1RSSU5HID0gXCIjI1ZFUlNJT04jI1wiO1xuXG5lbnVtIE1vZGVzIHtcbiAgQ0pTID0gXCJjb21tb25qc1wiLFxuICBFU00gPSBcImVzMjAyMlwiLFxufVxuXG5jb25zdCBDb21tYW5kcyA9IFtcInVwZGF0ZS1zY3JpcHRzXCIsIFwidGFnLXJlbGVhc2VcIiwgXCJidWlsZC1zY3JpcHRzXCJdO1xuXG5jb25zdCBvcHRpb25zID0ge1xuICBwcm9kOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGRldjoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBkb2NzOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGNvbW1hbmRzOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGJhbm5lcjoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxufTtcblxuY29uc3QgY2pzMlRyYW5zZm9ybWVyID0gKCkgPT4ge1xuICBjb25zdCBsb2cgPSBCdWlsZFNjcmlwdHMubG9nLmZvcihjanMyVHJhbnNmb3JtZXIpO1xuICBjb25zdCByZXNvbHV0aW9uQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gIHJldHVybiAodHJhbnNmb3JtYXRpb25Db250ZXh0OiB0cy5UcmFuc2Zvcm1hdGlvbkNvbnRleHQpID0+IHtcbiAgICByZXR1cm4gKHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZURpciA9IHBhdGguZGlybmFtZShzb3VyY2VGaWxlLmZpbGVOYW1lKTtcblxuICAgICAgZnVuY3Rpb24gcmVzb2x2ZVBhdGgoaW1wb3J0UGF0aDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gSlNPTi5zdHJpbmdpZnkoW3NvdXJjZURpciwgaW1wb3J0UGF0aF0pO1xuICAgICAgICBjb25zdCBjYWNoZWRWYWx1ZSA9IHJlc29sdXRpb25DYWNoZS5nZXQoY2FjaGVLZXkpO1xuICAgICAgICBpZiAoY2FjaGVkVmFsdWUgIT0gbnVsbCkgcmV0dXJuIGNhY2hlZFZhbHVlO1xuXG4gICAgICAgIGxldCByZXNvbHZlZFBhdGggPSBpbXBvcnRQYXRoO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlc29sdmVkUGF0aCA9IHBhdGgucmVzb2x2ZShzb3VyY2VEaXIsIHJlc29sdmVkUGF0aCArIFwiLnRzXCIpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHJlc29sdmUgcGF0aCAke2ltcG9ydFBhdGh9OiAke2Vycm9yfWApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdGF0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHN0YXQgPSBmcy5zdGF0U3luYyhyZXNvbHZlZFBhdGgpO1xuICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxvZy52ZXJib3NlKFxuICAgICAgICAgICAgICBgVGVzdGluZyBleGlzdGVuY2Ugb2YgcGF0aCAke3Jlc29sdmVkUGF0aH0gYXMgYSBmb2xkZXIgZGVmYXVsdGluZyB0byBpbmRleCBmaWxlYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHN0YXQgPSBmcy5zdGF0U3luYyhyZXNvbHZlZFBhdGgucmVwbGFjZSgvXFwudHMkL2dtLCBcIlwiKSk7XG4gICAgICAgICAgfSBjYXRjaCAoZTI6IHVua25vd24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYEZhaWxlZCB0byByZXNvbHZlIHBhdGggJHtpbXBvcnRQYXRofTogJHtlfSwgJHtlMn1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpKVxuICAgICAgICAgIHJlc29sdmVkUGF0aCA9IHJlc29sdmVkUGF0aC5yZXBsYWNlKC9cXC50cyQvZ20sIFwiL2luZGV4LnRzXCIpO1xuXG4gICAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUocmVzb2x2ZWRQYXRoKSkge1xuICAgICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9XG4gICAgICAgICAgICAoL1xcLnRzeD8kLy5leGVjKHBhdGguYmFzZW5hbWUocmVzb2x2ZWRQYXRoKSkgfHwgW10pWzBdIHx8IHZvaWQgMDtcbiAgICAgICAgICBjb25zdCBtYXBwZWRFeHRlbnNpb24gPSBcIi5janNcIjtcblxuICAgICAgICAgIHJlc29sdmVkUGF0aCA9XG4gICAgICAgICAgICBcIi4vXCIgK1xuICAgICAgICAgICAgcGF0aC5yZWxhdGl2ZShcbiAgICAgICAgICAgICAgc291cmNlRGlyLFxuICAgICAgICAgICAgICBwYXRoLnJlc29sdmUoXG4gICAgICAgICAgICAgICAgcGF0aC5kaXJuYW1lKHJlc29sdmVkUGF0aCksXG4gICAgICAgICAgICAgICAgcGF0aC5iYXNlbmFtZShyZXNvbHZlZFBhdGgsIGV4dGVuc2lvbikgKyBtYXBwZWRFeHRlbnNpb25cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc29sdXRpb25DYWNoZS5zZXQoY2FjaGVLZXksIHJlc29sdmVkUGF0aCk7XG4gICAgICAgIHJldHVybiByZXNvbHZlZFBhdGg7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHZpc2l0Tm9kZShub2RlOiB0cy5Ob2RlKTogdHMuVmlzaXRSZXN1bHQ8dHMuTm9kZT4ge1xuICAgICAgICBpZiAoc2hvdWxkTXV0YXRlTW9kdWxlU3BlY2lmaWVyKG5vZGUpKSB7XG4gICAgICAgICAgaWYgKHRzLmlzSW1wb3J0RGVjbGFyYXRpb24obm9kZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHJlc29sdmVQYXRoKG5vZGUubW9kdWxlU3BlY2lmaWVyLnRleHQpO1xuICAgICAgICAgICAgY29uc3QgbmV3TW9kdWxlU3BlY2lmaWVyID1cbiAgICAgICAgICAgICAgdHJhbnNmb3JtYXRpb25Db250ZXh0LmZhY3RvcnkuY3JlYXRlU3RyaW5nTGl0ZXJhbChyZXNvbHZlZFBhdGgpO1xuICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWF0aW9uQ29udGV4dC5mYWN0b3J5LnVwZGF0ZUltcG9ydERlY2xhcmF0aW9uKFxuICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICBub2RlLm1vZGlmaWVycyxcbiAgICAgICAgICAgICAgbm9kZS5pbXBvcnRDbGF1c2UsXG4gICAgICAgICAgICAgIG5ld01vZHVsZVNwZWNpZmllcixcbiAgICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHMuaXNFeHBvcnREZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZVBhdGgobm9kZS5tb2R1bGVTcGVjaWZpZXIudGV4dCk7XG4gICAgICAgICAgICBjb25zdCBuZXdNb2R1bGVTcGVjaWZpZXIgPVxuICAgICAgICAgICAgICB0cmFuc2Zvcm1hdGlvbkNvbnRleHQuZmFjdG9yeS5jcmVhdGVTdHJpbmdMaXRlcmFsKHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtYXRpb25Db250ZXh0LmZhY3RvcnkudXBkYXRlRXhwb3J0RGVjbGFyYXRpb24oXG4gICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgIG5vZGUubW9kaWZpZXJzLFxuICAgICAgICAgICAgICBub2RlLmlzVHlwZU9ubHksXG4gICAgICAgICAgICAgIG5vZGUuZXhwb3J0Q2xhdXNlLFxuICAgICAgICAgICAgICBuZXdNb2R1bGVTcGVjaWZpZXIsXG4gICAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHMudmlzaXRFYWNoQ2hpbGQobm9kZSwgdmlzaXROb2RlLCB0cmFuc2Zvcm1hdGlvbkNvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBzaG91bGRNdXRhdGVNb2R1bGVTcGVjaWZpZXIobm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgKFxuICAgICAgICB8IHRzLkltcG9ydERlY2xhcmF0aW9uXG4gICAgICAgIHwgdHMuRXhwb3J0RGVjbGFyYXRpb25cbiAgICAgICkgJiB7XG4gICAgICAgIG1vZHVsZVNwZWNpZmllcjogdHMuU3RyaW5nTGl0ZXJhbDtcbiAgICAgIH0ge1xuICAgICAgICBpZiAoIXRzLmlzSW1wb3J0RGVjbGFyYXRpb24obm9kZSkgJiYgIXRzLmlzRXhwb3J0RGVjbGFyYXRpb24obm9kZSkpXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGlmIChub2RlLm1vZHVsZVNwZWNpZmllciA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIG9ubHkgd2hlbiBtb2R1bGUgc3BlY2lmaWVyIGlzIHZhbGlkXG4gICAgICAgIGlmICghdHMuaXNTdHJpbmdMaXRlcmFsKG5vZGUubW9kdWxlU3BlY2lmaWVyKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyBvbmx5IHdoZW4gcGF0aCBpcyByZWxhdGl2ZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgIW5vZGUubW9kdWxlU3BlY2lmaWVyLnRleHQuc3RhcnRzV2l0aChcIi4vXCIpICYmXG4gICAgICAgICAgIW5vZGUubW9kdWxlU3BlY2lmaWVyLnRleHQuc3RhcnRzV2l0aChcIi4uL1wiKVxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyBvbmx5IHdoZW4gbW9kdWxlIHNwZWNpZmllciBoYXMgbm8gZXh0ZW5zaW9uXG4gICAgICAgIGlmIChwYXRoLmV4dG5hbWUobm9kZS5tb2R1bGVTcGVjaWZpZXIudGV4dCkgIT09IFwiXCIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cy52aXNpdE5vZGUoc291cmNlRmlsZSwgdmlzaXROb2RlKSBhcyBTb3VyY2VGaWxlO1xuICAgIH07XG4gIH07XG59O1xuXG5leHBvcnQgY2xhc3MgQnVpbGRTY3JpcHRzIGV4dGVuZHMgQ29tbWFuZDxcbiAgQ29tbWFuZE9wdGlvbnM8dHlwZW9mIG9wdGlvbnM+LFxuICB2b2lkXG4+IHtcbiAgcHJpdmF0ZSByZXBsYWNlbWVudHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBwa2dWZXJzaW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGtnTmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJCdWlsZFNjcmlwdHNcIixcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIERlZmF1bHRDb21tYW5kT3B0aW9ucywgb3B0aW9ucykgYXMgQ29tbWFuZE9wdGlvbnM8XG4gICAgICAgIHR5cGVvZiBvcHRpb25zXG4gICAgICA+XG4gICAgKTtcbiAgICBjb25zdCBwa2cgPSBnZXRQYWNrYWdlKCkgYXMgeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9O1xuICAgIGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9ID0gcGtnO1xuICAgIHRoaXMucGtnTmFtZSA9IG5hbWUuaW5jbHVkZXMoXCJAXCIpID8gbmFtZS5zcGxpdChcIi9cIilbMV0gOiBuYW1lO1xuICAgIHRoaXMucGtnVmVyc2lvbiA9IHZlcnNpb247XG4gICAgdGhpcy5yZXBsYWNlbWVudHNbVkVSU0lPTl9TVFJJTkddID0gdGhpcy5wa2dWZXJzaW9uO1xuICB9XG5cbiAgcGF0Y2hGaWxlcyhwOiBzdHJpbmcpIHtcbiAgICBjb25zdCBsb2cgPSB0aGlzLmxvZy5mb3IodGhpcy5wYXRjaEZpbGVzKTtcbiAgICBjb25zdCB7IG5hbWUsIHZlcnNpb24gfSA9IGdldFBhY2thZ2UoKSBhcyBhbnk7XG4gICAgbG9nLmluZm8oYFBhdGNoaW5nICR7bmFtZX0gJHt2ZXJzaW9ufSBtb2R1bGUgaW4gJHtwfS4uLmApO1xuICAgIGNvbnN0IHN0YXQgPSBmcy5zdGF0U3luYyhwKTtcbiAgICBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpKVxuICAgICAgZnMucmVhZGRpclN5bmMocCwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSlcbiAgICAgICAgLmZpbHRlcigocCkgPT4gcC5pc0ZpbGUoKSlcbiAgICAgICAgLmZvckVhY2goKGZpbGUpID0+XG4gICAgICAgICAgcGF0Y2hGaWxlKHBhdGguam9pbihmaWxlLnBhcmVudFBhdGgsIGZpbGUubmFtZSksIHRoaXMucmVwbGFjZW1lbnRzKVxuICAgICAgICApO1xuICAgIGxvZy52ZXJib3NlKGBNb2R1bGUgJHtuYW1lfSAke3ZlcnNpb259IHBhdGNoZWQgaW4gJHtwfS4uLmApO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBvcnREaWFnbm9zdGljcyhkaWFnbm9zdGljczogRGlhZ25vc3RpY1tdKTogdm9pZCB7XG4gICAgZGlhZ25vc3RpY3MuZm9yRWFjaCgoZGlhZ25vc3RpYykgPT4ge1xuICAgICAgbGV0IG1lc3NhZ2UgPSBcIkVycm9yXCI7XG4gICAgICBpZiAoZGlhZ25vc3RpYy5maWxlICYmIGRpYWdub3N0aWMuc3RhcnQpIHtcbiAgICAgICAgY29uc3QgeyBsaW5lLCBjaGFyYWN0ZXIgfSA9XG4gICAgICAgICAgZGlhZ25vc3RpYy5maWxlLmdldExpbmVBbmRDaGFyYWN0ZXJPZlBvc2l0aW9uKGRpYWdub3N0aWMuc3RhcnQpO1xuICAgICAgICBtZXNzYWdlICs9IGAgJHtkaWFnbm9zdGljLmZpbGUuZmlsZU5hbWV9ICgke2xpbmUgKyAxfSwke2NoYXJhY3RlciArIDF9KWA7XG4gICAgICB9XG4gICAgICBtZXNzYWdlICs9XG4gICAgICAgIFwiOiBcIiArIHRzLmZsYXR0ZW5EaWFnbm9zdGljTWVzc2FnZVRleHQoZGlhZ25vc3RpYy5tZXNzYWdlVGV4dCwgXCJcXG5cIik7XG4gICAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZENvbmZpZ0ZpbGUoY29uZmlnRmlsZU5hbWU6IHN0cmluZykge1xuICAgIC8vIFJlYWQgY29uZmlnIGZpbGVcbiAgICBjb25zdCBjb25maWdGaWxlVGV4dCA9IGZzLnJlYWRGaWxlU3luYyhjb25maWdGaWxlTmFtZSkudG9TdHJpbmcoKTtcblxuICAgIC8vIFBhcnNlIEpTT04sIGFmdGVyIHJlbW92aW5nIGNvbW1lbnRzLiBKdXN0IGZhbmNpZXIgSlNPTi5wYXJzZVxuICAgIGNvbnN0IHJlc3VsdCA9IHRzLnBhcnNlQ29uZmlnRmlsZVRleHRUb0pzb24oY29uZmlnRmlsZU5hbWUsIGNvbmZpZ0ZpbGVUZXh0KTtcbiAgICBjb25zdCBjb25maWdPYmplY3QgPSByZXN1bHQuY29uZmlnO1xuICAgIGlmICghY29uZmlnT2JqZWN0KSB7XG4gICAgICB0aGlzLnJlcG9ydERpYWdub3N0aWNzKFtyZXN1bHQuZXJyb3IhXSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcGFyc2UgdHNjb25maWcuanNvblwiKTtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWN0IGNvbmZpZyBpbmZyb21hdGlvblxuICAgIGNvbnN0IGNvbmZpZ1BhcnNlUmVzdWx0ID0gdHMucGFyc2VKc29uQ29uZmlnRmlsZUNvbnRlbnQoXG4gICAgICBjb25maWdPYmplY3QsXG4gICAgICB0cy5zeXMsXG4gICAgICBwYXRoLmRpcm5hbWUoY29uZmlnRmlsZU5hbWUpXG4gICAgKTtcbiAgICBpZiAoY29uZmlnUGFyc2VSZXN1bHQuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucmVwb3J0RGlhZ25vc3RpY3MoY29uZmlnUGFyc2VSZXN1bHQuZXJyb3JzKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBwYXJzZSB0c2NvbmZpZy5qc29uXCIpO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnUGFyc2VSZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkVHMoaXNEZXY6IGJvb2xlYW4sIG1vZGU6IE1vZGVzLCBidW5kbGUgPSBmYWxzZSkge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLmJ1aWxkVHMpO1xuICAgIGxvZy5pbmZvKFxuICAgICAgYEJ1aWxkaW5nICR7dGhpcy5wa2dOYW1lfSAke3RoaXMucGtnVmVyc2lvbn0gbW9kdWxlICgke21vZGV9KSBpbiAke2lzRGV2ID8gXCJkZXZcIiA6IFwicHJvZFwifSBtb2RlLi4uYFxuICAgICk7XG4gICAgbGV0IHRzQ29uZmlnO1xuICAgIHRyeSB7XG4gICAgICB0c0NvbmZpZyA9IHRoaXMucmVhZENvbmZpZ0ZpbGUoXCIuL3RzY29uZmlnLmpzb25cIik7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcGFyc2UgdHNjb25maWcuanNvbjogJHtlfWApO1xuICAgIH1cblxuICAgIGlmIChidW5kbGUpIHtcbiAgICAgIHRzQ29uZmlnLm9wdGlvbnMubW9kdWxlID0gTW9kdWxlS2luZC5BTUQ7XG4gICAgICB0c0NvbmZpZy5vcHRpb25zLm91dERpciA9IFwiZGlzdFwiO1xuICAgICAgdHNDb25maWcub3B0aW9ucy5pc29sYXRlZE1vZHVsZXMgPSBmYWxzZTtcbiAgICAgIHRzQ29uZmlnLm9wdGlvbnMub3V0RmlsZSA9IHRoaXMucGtnTmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHNDb25maWcub3B0aW9ucy5vdXREaXIgPSBgbGliJHttb2RlID09PSBNb2Rlcy5FU00gPyBcIi9lc21cIiA6IFwiXCJ9YDtcbiAgICAgIHRzQ29uZmlnLm9wdGlvbnMubW9kdWxlID1cbiAgICAgICAgbW9kZSA9PT0gTW9kZXMuRVNNID8gTW9kdWxlS2luZC5FUzIwMjIgOiBNb2R1bGVLaW5kLkNvbW1vbkpTO1xuICAgIH1cblxuICAgIGlmIChpc0Rldikge1xuICAgICAgdHNDb25maWcub3B0aW9ucy5pbmxpbmVTb3VyY2VNYXAgPSB0cnVlO1xuICAgICAgdHNDb25maWcub3B0aW9ucy5zb3VyY2VNYXAgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHNDb25maWcub3B0aW9ucy5zb3VyY2VNYXAgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9ncmFtID0gdHMuY3JlYXRlUHJvZ3JhbSh0c0NvbmZpZy5maWxlTmFtZXMsIHRzQ29uZmlnLm9wdGlvbnMpO1xuXG4gICAgY29uc3QgdHJhbnNmb3JtYXRpb25zOiB7IGJlZm9yZT86IGFueVtdIH0gPSB7fTtcbiAgICBpZiAobW9kZSA9PT0gTW9kZXMuQ0pTKSB7XG4gICAgICB0cmFuc2Zvcm1hdGlvbnMuYmVmb3JlID0gW2NqczJUcmFuc2Zvcm1lcigpXTtcbiAgICB9XG5cbiAgICBjb25zdCBlbWl0UmVzdWx0OiBFbWl0UmVzdWx0ID0gcHJvZ3JhbS5lbWl0KFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdHJhbnNmb3JtYXRpb25zXG4gICAgKTtcblxuICAgIGNvbnN0IGFsbERpYWdub3N0aWNzID0gdHNcbiAgICAgIC5nZXRQcmVFbWl0RGlhZ25vc3RpY3MocHJvZ3JhbSlcbiAgICAgIC5jb25jYXQoZW1pdFJlc3VsdC5kaWFnbm9zdGljcyk7XG5cbiAgICBhbGxEaWFnbm9zdGljcy5mb3JFYWNoKChkaWFnbm9zdGljKSA9PiB7XG4gICAgICBpZiAoZGlhZ25vc3RpYy5maWxlKSB7XG4gICAgICAgIGNvbnN0IHsgbGluZSwgY2hhcmFjdGVyIH0gPVxuICAgICAgICAgIGRpYWdub3N0aWMuZmlsZS5nZXRMaW5lQW5kQ2hhcmFjdGVyT2ZQb3NpdGlvbihkaWFnbm9zdGljLnN0YXJ0ISk7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0cy5mbGF0dGVuRGlhZ25vc3RpY01lc3NhZ2VUZXh0KFxuICAgICAgICAgIGRpYWdub3N0aWMubWVzc2FnZVRleHQsXG4gICAgICAgICAgXCJcXG5cIlxuICAgICAgICApO1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgJHtkaWFnbm9zdGljLmZpbGUuZmlsZU5hbWV9ICgke2xpbmUgKyAxfSwke2NoYXJhY3RlciArIDF9KTogJHttZXNzYWdlfWBcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIHRzLmZsYXR0ZW5EaWFnbm9zdGljTWVzc2FnZVRleHQoZGlhZ25vc3RpYy5tZXNzYWdlVGV4dCwgXCJcXG5cIilcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoZW1pdFJlc3VsdC5lbWl0U2tpcHBlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQnVpbGQgZmFpbGVkXCIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGQoaXNEZXY6IGJvb2xlYW4sIG1vZGU6IE1vZGVzLCBidW5kbGUgPSBmYWxzZSkge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLmJ1aWxkKTtcbiAgICBhd2FpdCB0aGlzLmJ1aWxkVHMoaXNEZXYsIG1vZGUsIGJ1bmRsZSk7XG5cbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBNb2R1bGUgJHt0aGlzLnBrZ05hbWV9ICR7dGhpcy5wa2dWZXJzaW9ufSAoJHttb2RlfSkgYnVpbHQgaW4gJHtpc0RldiA/IFwiZGV2XCIgOiBcInByb2RcIn0gbW9kZS4uLmBcbiAgICApO1xuICAgIGlmIChtb2RlID09PSBNb2Rlcy5DSlMgJiYgIWJ1bmRsZSkge1xuICAgICAgY29uc3QgZmlsZXMgPSBnZXRBbGxGaWxlcyhcbiAgICAgICAgXCJsaWJcIixcbiAgICAgICAgKGZpbGUpID0+IGZpbGUuZW5kc1dpdGgoXCIuanNcIikgJiYgIWZpbGUuaW5jbHVkZXMoXCIvZXNtL1wiKVxuICAgICAgKTtcblxuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgIGxvZy52ZXJib3NlKGBQYXRjaGluZyAke2ZpbGV9J3MgY2pzIGltcG9ydHMuLi5gKTtcbiAgICAgICAgY29uc3QgZiA9IGZpbGUucmVwbGFjZShcIi5qc1wiLCBcIi5janNcIik7XG4gICAgICAgIGF3YWl0IHJlbmFtZUZpbGUoZmlsZSwgZik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29weUFzc2V0cyhtb2RlOiBNb2Rlcykge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLmNvcHlBc3NldHMpO1xuICAgIGxldCBoYXNBc3NldHMgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgaGFzQXNzZXRzID0gZnMuc3RhdFN5bmMoXCIuL3NyYy9hc3NldHNcIikuaXNEaXJlY3RvcnkoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICByZXR1cm4gbG9nLnZlcmJvc2UoYE5vIGFzc2V0cyBmb3VuZCBpbiAuL3NyYy9hc3NldHMgdG8gY29weWApO1xuICAgIH1cbiAgICBpZiAoaGFzQXNzZXRzKVxuICAgICAgY29weUZpbGUoXG4gICAgICAgIFwiLi9zcmMvYXNzZXRzXCIsXG4gICAgICAgIGAuLyR7bW9kZSA9PT0gTW9kZXMuQ0pTID8gXCJsaWJcIiA6IFwiZGlzdFwifS9hc3NldHNgXG4gICAgICApO1xuICB9XG5cbiAgYXN5bmMgYnVpbGRDb21tYW5kcygpIHtcbiAgICBmb3IgKGNvbnN0IGNtZCBvZiBDb21tYW5kcykge1xuICAgICAgYXdhaXQgdGhpcy5idW5kbGUoTW9kZXMuQ0pTLCB0cnVlLCB0cnVlLCBgc3JjL2Jpbi8ke2NtZH0udHNgLCBjbWQpO1xuICAgICAgbGV0IGRhdGEgPSByZWFkRmlsZShgYmluLyR7Y21kfS5janNgKTtcbiAgICAgIGRhdGEgPSBcIiMhL3Vzci9iaW4vZW52IG5vZGVcXG5cIiArIGRhdGE7XG4gICAgICB3cml0ZUZpbGUoYGJpbi8ke2NtZH0uY2pzYCwgZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYnVuZGxlKFxuICAgIG1vZGU6IE1vZGVzLFxuICAgIGlzRGV2OiBib29sZWFuLFxuICAgIGlzTGliOiBib29sZWFuLFxuICAgIGVudHJ5RmlsZTogc3RyaW5nID0gXCJzcmMvaW5kZXgudHNcIixcbiAgICBuYW1lT3ZlcnJpZGU6IHN0cmluZyA9IHRoaXMucGtnTmFtZSxcbiAgICBleHRlcm5hbHM/OiBzdHJpbmdbXSxcbiAgICBpbmNsdWRlOiBzdHJpbmdbXSA9IFtcbiAgICAgIFwicHJvbXB0c1wiLFxuICAgICAgXCJzdHlsZWQtc3RyaW5nLWJ1aWxkZXJcIixcbiAgICAgIFwidHlwZWQtb2JqZWN0LWFjY3VtdWxhdG9yXCIsXG4gICAgICBcIkBkZWNhZi10cy9sb2dnaW5nXCIsXG4gICAgXVxuICApIHtcbiAgICBjb25zdCBpc0VzbSA9IG1vZGUgPT09IE1vZGVzLkVTTTtcbiAgICBjb25zdCBwa2dOYW1lID0gdGhpcy5wa2dOYW1lO1xuXG4gICAgY29uc3QgZXh0ID0gQXJyYXkuZnJvbShcbiAgICAgIG5ldyBTZXQoW1xuICAgICAgICAuLi5bXG4gICAgICAgICAgXCJmc1wiLFxuICAgICAgICAgIFwicGF0aFwiLFxuICAgICAgICAgIFwicHJvY2Vzc1wiLFxuICAgICAgICAgIFwicm9sbHVwXCIsXG4gICAgICAgICAgXCJAcm9sbHVwL3BsdWdpbi10eXBlc2NyaXB0XCIsXG4gICAgICAgICAgXCJAcm9sbHVwL3BsdWdpbi1qc29uXCIsXG4gICAgICAgICAgXCJAcm9sbHVwL3BsdWdpbi1jb21tb25qc1wiLFxuICAgICAgICAgIFwiQHJvbGx1cC9wbHVnaW4tbm9kZS1yZXNvbHZlXCIsXG4gICAgICAgICAgXCJjaGlsZF9wcm9jZXNzXCIsXG4gICAgICAgICAgXCJ0c2xpYlwiLFxuICAgICAgICAgIFwidXRpbFwiLFxuICAgICAgICAgIFwiaHR0cHNcIixcbiAgICAgICAgXSxcbiAgICAgICAgLi4uKGV4dGVybmFscyB8fCBbXSksXG4gICAgICBdKVxuICAgICk7XG5cbiAgICBjb25zdCBwbHVnaW5zID0gW1xuICAgICAgdHlwZXNjcmlwdCh7XG4gICAgICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgICAgIG1vZHVsZTogXCJlc25leHRcIixcbiAgICAgICAgICBkZWNsYXJhdGlvbjogZmFsc2UsXG4gICAgICAgICAgb3V0RGlyOiBpc0xpYiA/IFwiYmluXCIgOiBcImRpc3RcIixcbiAgICAgICAgfSxcbiAgICAgICAgaW5jbHVkZTogW1wic3JjLyoqLyoudHNcIl0sXG4gICAgICAgIGV4Y2x1ZGU6IFtcIm5vZGVfbW9kdWxlc1wiLCBcIioqLyouc3BlYy50c1wiXSxcbiAgICAgICAgdHNjb25maWc6IFwiLi90c2NvbmZpZy5qc29uXCIsXG4gICAgICB9KSxcbiAgICAgIGpzb24oKSxcbiAgICBdO1xuXG4gICAgaWYgKGlzTGliKSB7XG4gICAgICBwbHVnaW5zLnB1c2goXG4gICAgICAgIGNvbW1vbmpzKHtcbiAgICAgICAgICBpbmNsdWRlOiBbXSxcbiAgICAgICAgICBleGNsdWRlOiBleHRlcm5hbHMsXG4gICAgICAgIH0pLFxuICAgICAgICBub2RlUmVzb2x2ZSh7XG4gICAgICAgICAgcmVzb2x2ZU9ubHk6IGluY2x1ZGUsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0OiBJbnB1dE9wdGlvbnMgPSB7XG4gICAgICBpbnB1dDogZW50cnlGaWxlLFxuICAgICAgcGx1Z2luczogcGx1Z2lucyxcbiAgICAgIGV4dGVybmFsOiBleHQsXG4gICAgfTtcblxuICAgIGNvbnN0IG91dHB1dHM6IE91dHB1dE9wdGlvbnNbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgZmlsZTogYCR7aXNMaWIgPyBcImJpbi9cIiA6IFwiZGlzdC9cIn0ke25hbWVPdmVycmlkZSA/IG5hbWVPdmVycmlkZSA6IGAuYnVuZGxlLiR7IWlzRGV2ID8gXCJtaW5cIiA6IFwiXCJ9YH0ke2lzRXNtID8gXCIuZXNtXCIgOiBcIlwifS5janNgLFxuICAgICAgICBmb3JtYXQ6IGlzTGliID8gXCJjanNcIiA6IGlzRXNtID8gXCJlc21cIiA6IFwidW1kXCIsXG4gICAgICAgIG5hbWU6IHBrZ05hbWUsXG4gICAgICAgIGVzTW9kdWxlOiBpc0VzbSxcbiAgICAgICAgc291cmNlbWFwOiBpc0RldiA/IFwiaW5saW5lXCIgOiBmYWxzZSxcbiAgICAgICAgZ2xvYmFsczoge30sXG4gICAgICAgIGV4cG9ydHM6IFwiYXV0b1wiLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJ1bmRsZSA9IGF3YWl0IHJvbGx1cChpbnB1dCk7XG4gICAgICBjb25zb2xlLmxvZyhidW5kbGUud2F0Y2hGaWxlcyk7XG4gICAgICBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZU91dHB1dHMoYnVuZGxlOiBSb2xsdXBCdWlsZCkge1xuICAgICAgICBmb3IgKGNvbnN0IG91dHB1dE9wdGlvbnMgb2Ygb3V0cHV0cykge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICBjb25zdCB7IG91dHB1dCB9ID0gYXdhaXQgYnVuZGxlLndyaXRlKG91dHB1dE9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGdlbmVyYXRlT3V0cHV0cyhidW5kbGUpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGJ1bmRsZTogJHtlfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGRCeUVudihpc0RldjogYm9vbGVhbikge1xuICAgIHRyeSB7XG4gICAgICBkZWxldGVQYXRoKFwibGliXCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGRlbGV0ZVBhdGgoXCJkaXN0XCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG4gICAgZnMubWtkaXJTeW5jKFwibGliXCIpO1xuICAgIGZzLm1rZGlyU3luYyhcImRpc3RcIik7XG4gICAgYXdhaXQgdGhpcy5idWlsZChpc0RldiwgTW9kZXMuRVNNKTtcbiAgICBhd2FpdCB0aGlzLmJ1aWxkKGlzRGV2LCBNb2Rlcy5DSlMpO1xuICAgIGF3YWl0IHRoaXMuYnVuZGxlKE1vZGVzLkVTTSwgdHJ1ZSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuYnVuZGxlKE1vZGVzLkNKUywgdHJ1ZSwgZmFsc2UpO1xuICAgIHRoaXMucGF0Y2hGaWxlcyhcImxpYlwiKTtcbiAgICB0aGlzLnBhdGNoRmlsZXMoXCJkaXN0XCIpO1xuICAgIHRoaXMuY29weUFzc2V0cyhNb2Rlcy5DSlMpO1xuICAgIHRoaXMuY29weUFzc2V0cyhNb2Rlcy5FU00pO1xuICB9XG5cbiAgYXN5bmMgYnVpbGREZXYoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRCeUVudih0cnVlKTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkUHJvZCgpIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZEJ5RW52KGZhbHNlKTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkRG9jcygpIHtcbiAgICBhd2FpdCBydW5Db21tYW5kKGBucG0gaW5zdGFsbCBiZXR0ZXItZG9jcyB0YWZmeWRiYCkucHJvbWlzZTtcbiAgICBhd2FpdCBydW5Db21tYW5kKGBucHggbWFya2Rvd24taW5jbHVkZSAuL3dvcmtkb2NzL3JlYWRtZS1tZC5qc29uYCkucHJvbWlzZTtcbiAgICBhd2FpdCBydW5Db21tYW5kKFxuICAgICAgYG5weCBqc2RvYyAtYyAuL3dvcmtkb2NzL2pzZG9jcy5qc29uIC10IC4vbm9kZV9tb2R1bGVzL2JldHRlci1kb2NzYFxuICAgICkucHJvbWlzZTtcbiAgICBhd2FpdCBydW5Db21tYW5kKGBucG0gcmVtb3ZlIGJldHRlci1kb2NzIHRhZmZ5ZGJgKS5wcm9taXNlO1xuICAgIFtcbiAgICAgIHtcbiAgICAgICAgc3JjOiBcIndvcmtkb2NzL2Fzc2V0c1wiLFxuICAgICAgICBkZXN0OiBcIi4vZG9jcy93b3JrZG9jcy9hc3NldHNcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHNyYzogXCJ3b3JrZG9jcy9yZXBvcnRzL2NvdmVyYWdlXCIsXG4gICAgICAgIGRlc3Q6IFwiLi9kb2NzL3dvcmtkb2NzL3JlcG9ydHMvY292ZXJhZ2VcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHNyYzogXCJ3b3JrZG9jcy9yZXBvcnRzL2h0bWxcIixcbiAgICAgICAgZGVzdDogXCIuL2RvY3Mvd29ya2RvY3MvcmVwb3J0cy9odG1sXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzcmM6IFwid29ya2RvY3MvcmVzb3VyY2VzXCIsXG4gICAgICAgIGRlc3Q6IFwiLi9kb2NzL3dvcmtkb2NzL3Jlc291cmNlc1wiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc3JjOiBcIkxJQ0VOU0UubWRcIixcbiAgICAgICAgZGVzdDogXCIuL2RvY3MvTElDRU5TRS5tZFwiLFxuICAgICAgfSxcbiAgICBdLmZvckVhY2goKGYpID0+IHtcbiAgICAgIGNvbnN0IHsgc3JjLCBkZXN0IH0gPSBmO1xuICAgICAgY29weUZpbGUoc3JjLCBkZXN0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBydW48Uj4oXG4gICAgYW5zd2VyczogTG9nZ2luZ0NvbmZpZyAmXG4gICAgICB0eXBlb2YgRGVmYXVsdENvbW1hbmRWYWx1ZXMgJiB7IFtrIGluIGtleW9mIHR5cGVvZiBvcHRpb25zXTogdW5rbm93biB9XG4gICk6IFByb21pc2U8c3RyaW5nIHwgdm9pZCB8IFI+IHtcbiAgICBjb25zdCB7IGRldiwgcHJvZCwgZG9jcywgY29tbWFuZHMgfSA9IGFuc3dlcnM7XG5cbiAgICBpZiAoY29tbWFuZHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuYnVpbGRDb21tYW5kcygpO1xuICAgIH1cblxuICAgIGlmIChkZXYpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmJ1aWxkRGV2KCk7XG4gICAgfVxuICAgIGlmIChwcm9kKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5idWlsZFByb2QoKTtcbiAgICB9XG4gICAgaWYgKGRvY3MpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmJ1aWxkRG9jcygpO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgQnVpbGRTY3JpcHRzIH0gZnJvbSBcIi4uL2NsaS9jb21tYW5kc1wiO1xuXG5uZXcgQnVpbGRTY3JpcHRzKClcbiAgLmV4ZWN1dGUoKVxuICAudGhlbigoKSA9PiBCdWlsZFNjcmlwdHMubG9nLmluZm8oXCJTY3JpcHRzIGJ1aWx0IHN1Y2Nlc3NmdWxseS5cIikpXG4gIC5jYXRjaCgoZTogdW5rbm93bikgPT4ge1xuICAgIEJ1aWxkU2NyaXB0cy5sb2cuZXJyb3IoYEVycm9yIGJ1aWxkaW5nIHNjcmlwdHM6ICR7ZX1gKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH0pO1xuIl0sIm5hbWVzIjpbImFjdGlvbiIsInN0cmlwIiwicmVxdWlyZSQkMCIsInJlcXVpcmUkJDEiLCJjbGVhciIsImZpZ3VyZXNfMSIsInN0eWxlIiwibGluZXMiLCJ3cmFwIiwiZW50cmllc1RvRGlzcGxheSIsInV0aWwiLCJyZXF1aXJlJCQyIiwicmVxdWlyZSQkMyIsInJlcXVpcmUkJDQiLCJyZXF1aXJlJCQ1IiwicmVxdWlyZSQkNiIsInJlcXVpcmUkJDciLCJwcm9tcHQiLCJ0ZXh0Iiwic2VsZWN0IiwidG9nZ2xlIiwiZGF0ZXBhcnQiLCJtZXJpZGllbSIsImRheSIsImhvdXJzIiwibWlsbGlzZWNvbmRzIiwibWludXRlcyIsIm1vbnRoIiwic2Vjb25kcyIsInllYXIiLCJkYXRlcGFydHMiLCJyZXF1aXJlJCQ4IiwiZGF0ZSIsIm51bWJlciIsIm11bHRpc2VsZWN0IiwiYXV0b2NvbXBsZXRlIiwiYXV0b2NvbXBsZXRlTXVsdGlzZWxlY3QiLCJjb25maXJtIiwiZWxlbWVudHMiLCJwcm9tcHRzIiwicGFyc2VBcmdzIiwic3Bhd24iLCJ0cyIsIk1vZHVs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LFdBQVcsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksY0FBbUQsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUMsdUlBQXVJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLEVBQUUsTUFBTSxHQUFHLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDOztDQUVwK0IsU0FBUywyQkFBMkIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUUsT0FBTyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLFdBQVcsSUFBSSwwQ0FBMEMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7O0NBRTlaLFNBQVMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQzs7Q0FFakwsTUFBTSxLQUFLLEdBQUdDLGNBQWtCLEVBQUE7O0NBRWhDLE1BQU0sUUFBUSxHQUFHQyxVQUFxQjtBQUN0QyxPQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSztBQUM1QixPQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTTs7QUFFOUIsQ0FBQSxNQUFNLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDM0M7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLENBQUFDLE9BQWMsR0FBRyxVQUFVLE1BQU0sRUFBRSxPQUFPLEVBQUU7QUFDNUMsR0FBRSxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sS0FBSyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztHQUM5QyxJQUFJLElBQUksR0FBRyxDQUFDO0dBQ1osTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7O0FBRXJDLEdBQUUsSUFBSSxTQUFTLEdBQUcsMEJBQTBCLENBQUMsS0FBSyxDQUFDO0FBQ25ELE9BQU0sS0FBSzs7QUFFWCxHQUFFLElBQUk7QUFDTixLQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksR0FBRztBQUN4RCxPQUFNLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLO09BQ3RCLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ3BFO0lBQ0csQ0FBQyxPQUFPLEdBQUcsRUFBRTtBQUNoQixLQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ3BCLElBQUcsU0FBUztLQUNSLFNBQVMsQ0FBQyxDQUFDLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0VBQ3pCOzs7Ozs7Ozs7OztBQ3ZDRCxDQUFBLE1BQU0sSUFBSSxHQUFHO0dBQ1gsT0FBTyxFQUFFLEdBQUc7R0FDWixTQUFTLEVBQUUsR0FBRztHQUNkLFNBQVMsRUFBRSxHQUFHO0dBQ2QsVUFBVSxFQUFFLEdBQUc7R0FDZixPQUFPLEVBQUUsR0FBRztHQUNaLFFBQVEsRUFBRSxHQUFHO0dBQ2IsSUFBSSxFQUFFLEdBQUc7R0FDVCxLQUFLLEVBQUUsR0FBRztHQUNWLFFBQVEsRUFBRSxHQUFHO0dBQ2IsWUFBWSxFQUFFLEdBQUc7R0FDakIsSUFBSSxFQUFFLEdBQUc7QUFDWCxHQUFFLE9BQU8sRUFBRTtFQUNWO0FBQ0QsQ0FBQSxNQUFNLEdBQUcsR0FBRztBQUNaLEdBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO0FBQ3ZCLEdBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO0FBQzNCLEdBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO0FBQzNCLEdBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO0dBQzNCLE9BQU8sRUFBRSxLQUFLO0dBQ2QsUUFBUSxFQUFFLEtBQUs7R0FDZixJQUFJLEVBQUUsR0FBRztHQUNULEtBQUssRUFBRSxHQUFHO0dBQ1YsUUFBUSxFQUFFLEtBQUs7R0FDZixZQUFZLEVBQUUsR0FBRztHQUNqQixJQUFJLEVBQUUsR0FBRztBQUNYLEdBQUUsT0FBTyxFQUFFO0VBQ1Y7Q0FDRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsUUFBUSxLQUFLLE9BQU8sR0FBRyxHQUFHLEdBQUcsSUFBSTtBQUN6RCxDQUFBQyxXQUFjLEdBQUcsT0FBTzs7Ozs7Ozs7Ozs7Q0M3QnhCLE1BQU0sQ0FBQyxHQUFHLFVBQWdCOztDQUUxQixNQUFNLE9BQU8sR0FBR0YsZ0JBQUEsRUFBb0IsQ0FBQzs7O0FBR3JDLENBQUEsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUM3QixHQUFFLFFBQVEsRUFBRTtLQUNSLEtBQUssRUFBRSxDQUFDO0tBQ1IsTUFBTSxFQUFFLEtBQUssSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNO0lBQ3pDO0FBQ0gsR0FBRSxLQUFLLEVBQUU7S0FDTCxLQUFLLEVBQUUsQ0FBQztLQUNSLE1BQU0sRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTTtJQUMxQztBQUNILEdBQUUsU0FBUyxFQUFFO0tBQ1QsS0FBSyxFQUFFLENBQUM7S0FDUixNQUFNLEVBQUUsS0FBSyxJQUFJO0lBQ2xCO0FBQ0gsR0FBRSxPQUFPLEVBQUU7S0FDUCxLQUFLLEVBQUUsQ0FBQztBQUNaLEtBQUksTUFBTSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQzlCO0FBQ0EsRUFBQyxDQUFDOztBQUVGLENBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDOzs7QUFHdEQsQ0FBQSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0dBQzVCLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7R0FDN0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztHQUMzQixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ2pDLEdBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRztBQUNyQixFQUFDLENBQUM7O0FBRUYsQ0FBQSxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxLQUFLLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7OztBQUd0SSxDQUFBLE1BQU0sU0FBUyxHQUFHLFVBQVUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7O0NBRTVGLE1BQU0sSUFBSSxHQUFHLENBQUMsVUFBVSxFQUFFLFFBQVEsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLEdBQUcsT0FBTyxDQUFDLFlBQVksR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQzs7QUFFaEgsQ0FBQUcsT0FBYyxHQUFHO0FBQ2pCLEdBQUUsTUFBTTtBQUNSLEdBQUUsTUFBTTtBQUNSLEdBQUUsT0FBTztBQUNULEdBQUUsTUFBTTtBQUNSLEdBQUUsU0FBUztHQUNUO0VBQ0Q7Ozs7Ozs7Ozs7O0NDaERELE1BQU0sS0FBSyxHQUFHSixjQUFrQixFQUFBO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxDQUFBSyxPQUFjLEdBQUcsVUFBVSxHQUFHLEVBQUUsT0FBTyxFQUFFO0FBQ3pDLEdBQUUsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQ3JELEdBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEtBQUssQ0FBQyxNQUFNO0FBQ25DLEdBQUUsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDN0U7Ozs7Ozs7Ozs7QUNaRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQUMsTUFBYyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEtBQUs7QUFDckMsR0FBRSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUU7QUFDbkksR0FBRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSztBQUMxQixHQUFFLE9BQU8sQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSztLQUNuRixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxD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RUFBRTtBQUMxQixPQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSztBQUN4QixNQUFLLE1BQU0sT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFOztLQUV6QixJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsTUFBTSxHQUFHO0FBQ1gsS0FBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDckIsS0FBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUMvRyxLQUFLLENBQUMsTUFBTSxFQUFFO0FBQ2xCLEtBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztLQUMxUSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0s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QUFHLElBQUksR0FBRyxJQUFJO0VBQy9EOztDQUVELE1BQU0sR0FBRyxTQUFTLFFBQVEsQ0FBQztBQUMzQixHQUFFLFdBQVcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxFQUFFO0tBQ3JCLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDZjs7QUFFQSxHQUFFLEVBQUUsR0FBRztBQUNQLEtBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDOUM7O0FBRUEsR0FBRSxJQUFJLEdBQUc7QUFDVCxLQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzlDOztHQUVFLEtBQUssQ0FBQyxHQUFHLEVBQUU7QUFDYixLQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0M7O0FBRUEsR0FBRSxRQUFRLEdBQUc7S0FDVCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtLQUM5QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNoQyxLQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FB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RUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFOztDQUV2USxTQUFTLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sWUFBWSxFQUFFLElBQUksSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLEdBQUcsU0FBUyxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVB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QUVBLEdBQUUsTUFBTSxHQUFHO0FBQ1gsS0FBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7O0FBRXJCLEtBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDM0IsT0FBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbEosT0FBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzlEOztLQUVJLEtBQUssQ0FBQyxNQUFNLEVBQUU7QUFDbEIsS0FBSSxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQzs7QUFFMUIsS0FBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFeE8sS0FBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7T0FDZCxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0k7O0FBRUEsS0FBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztBQUNqSDs7QUFFQTs7QUFFQSxDQUFBcUIsUUFBYyxHQUFHLFlBQVk7Ozs7Ozs7Ozs7O0NDdlA3QixNQUFNLEtBQUssR0FBRyxVQUFnQjs7Q0FFOUIsTUFBTSxRQUFRLEdBQUc5QixVQUFxQjtBQUN0QyxPQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTTs7Q0FFOUIsTUFBTSxNQUFNLEdBQUdRLGVBQW1CLEVBQUE7O0NBRWxDLE1BQU0sU0FBUyxHQUFHQyxhQUFrQixFQUFBO0FBQ3BDLE9BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLO0FBQzdCLE9BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPO0FBQ2pDLE9BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLO0FBQzdCLE9BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJO0FBQzNCLE9BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLGdCQUFnQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0NBR0EsTUFBTSxpQkFBaUIsU0FBUyxNQUFNLENBQUM7QUFDdkMsR0FBRSxXQUFXLENBQUMsSUFBSSxHQUFHLEVBQUUsRUFBRTtLQUNyQixLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ2YsS0FBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPO0tBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDO0tBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDO0tBQ25DLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO0tBQzNCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSw2QkFBNkI7QUFDMUQsS0FBSSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHO0FBQy9CLEtBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLO0FBQzdCLEtBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRztBQUM5QixLQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVk7S0FDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxJQUFJLEVBQUU7QUFDbkQsS0FBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSztBQUMvQyxPQUFNLElBQUksT0FBTyxFQUFFLEtBQUssUUFBUSxFQUFFLEVBQUUsR0FBRztTQUMvQixLQUFLLEVBQUUsRUFBRTtBQUNqQixTQUFRLEtBQUssRUFBRTtRQUNSO0FBQ1AsT0FBTSxPQUFPO0FBQ2IsU0FBUSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7QUFDakQsU0FBUSxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxXQUFXO0FBQ3pDLFNBQVEsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztBQUM5RCxTQUFRLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLFFBQVE7QUFDbkMsU0FBUSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNwQjtBQUNQLE1BQUssQ0FBQztBQUNOLEtBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDOztBQUU1QyxLQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO09BQ3hCLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDbkI7QUFDQTs7QUFFQSxHQUFFLEtBQUssR0FBRztBQUNWLEtBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUNwQyxLQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQztLQUNmLElBQUksQ0FBQyxJQUFJLEVBQUU7S0FDWCxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsUUFBUSxHQUFHO0FBQ2IsS0FBSSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQzdDOztBQUVBLEdBQUUsSUFBSSxHQUFHO0tBQ0wsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNoQjs7QUFFQSxHQUFFLEtBQUssR0FBRztLQUNOLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJO0tBQy9CLElBQUksQ0FBQyxJQUFJLEVBQUU7S0FDWCxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCLEtBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0tBQ3BCLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDaEI7O0FBRUEsR0FBRSxNQUFNLEdBQUc7QUFDWCxLQUFJLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDOztBQUV2RCxLQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDaEUsT0FBTSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUk7T0FDeEIsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNuQixNQUFLLE1BQU07QUFDWCxPQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSTtBQUN0QixPQUFNLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSztPQUNwQixJQUFJLENBQUMsSUFBSSxFQUFFO09BQ1gsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNuQixPQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztPQUNwQixJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ2xCO0FBQ0E7O0FBRUEsR0FBRSxLQUFLLEdBQUc7QUFDVixLQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQztLQUNmLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxJQUFJLEdBQUc7S0FDTCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7S0FDbkMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLElBQUksR0FBRztBQUNULEtBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtLQUNuRCxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsRUFBRSxHQUFHO0FBQ1AsS0FBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO09BQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztBQUN6QyxNQUFLLE1BQU07T0FDTCxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ25COztLQUVJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxJQUFJLEdBQUc7QUFDVCxLQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDL0MsT0FBTSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7QUFDckIsTUFBSyxNQUFNO09BQ0wsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNuQjs7S0FFSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsSUFBSSxHQUFHO0tBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUs7S0FDeEMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLEtBQUssR0FBRztLQUNOLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUU7S0FDcEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUk7S0FDdkMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLGlCQUFpQixHQUFHO0tBQ2xCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7QUFFckMsS0FBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7QUFDcEIsT0FBTSxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUs7T0FDbEIsSUFBSSxDQUFDLE1BQU0sRUFBRTtNQUNkLE1BQU0sSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDM0YsT0FBTSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDeEIsTUFBSyxNQUFNO0FBQ1gsT0FBTSxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUk7T0FDakIsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNuQjtBQUNBOztBQUVBLEdBQUUsU0FBUyxHQUFHO0FBQ2QsS0FBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRTtBQUMzRSxPQUFNLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRTtBQUN4Qjs7QUFFQSxLQUFJLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUTtLQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQztLQUMxRSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUU7QUFDWixLQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTtPQUNiLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtBQUM5QixNQUFLLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO09BQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDdEIsTUFBSyxNQUFNO0FBQ1gsT0FBTSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDeEI7QUFDQTs7QUFFQSxHQUFFLGtCQUFrQixHQUFHO0tBQ25CLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtBQUM5RCxPQUFNLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFFBQVEsRUFBRTtTQUN6QyxPQUFPLElBQUksQ0FBQyxZQUFZO0FBQ2hDOztPQUVNLE9BQU8sbUJBQW1CLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsNEJBQTRCLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQztBQUN4Ujs7QUFFQSxLQUFJLE9BQU8sRUFBRTtBQUNiOztHQUVFLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUU7S0FDekMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxRQUFRLElBQUksR0FBRyxHQUFHLGNBQWMsR0FBRyxHQUFHO0tBQzFHLElBQUksS0FBSyxFQUFFLElBQUk7O0FBRW5CLEtBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFO0FBQ3BCLE9BQU0sS0FBSyxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ2xHLE1BQUssTUFBTTtPQUNMLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLOztPQUVoRSxJQUFJLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRTtTQUNqQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDOztBQUVwQyxTQUFRLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtXQUM3RyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFO0FBQzVDLGFBQVksTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO0FBQ2pDLGFBQVksS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDNUIsWUFBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBOztBQUVBLEtBQUksT0FBTyxNQUFNLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUMvQzs7O0dBR0QsZUFBZSxDQUFDLE9BQU8sRUFBRTtBQUMzQixLQUFJLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDOUIsT0FBTSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUM7QUFDcEQ7O0FBRUEsS0FBSSxJQUFJLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDO0FBQzlGLFNBQVEsVUFBVSxHQUFHLGlCQUFpQixDQUFDLFVBQVU7QUFDakQsU0FBUSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsUUFBUTs7QUFFN0MsS0FBSSxJQUFJLE1BQU07U0FDTixhQUFhLEdBQUcsRUFBRTs7QUFFMUIsS0FBSSxLQUFLLElBQUksQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO09BQzFDLElBQUksQ0FBQyxLQUFLLFVBQVUsSUFBSSxVQUFVLEdBQUcsQ0FBQyxFQUFFO0FBQzlDLFNBQVEsTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPO0FBQ2hDLFFBQU8sTUFBTSxJQUFJLENBQUMsS0FBSyxRQUFRLEdBQUcsQ0FBQyxJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFO0FBQ2xFLFNBQVEsTUFBTSxHQUFHLE9BQU8sQ0FBQyxTQUFTO0FBQ2xDLFFBQU8sTUFBTTtTQUNMLE1BQU0sR0FBRyxHQUFHO0FBQ3BCOztPQUVNLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0U7O0tBRUksT0FBTyxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDdkM7OztHQUdELGFBQWEsQ0FBQyxPQUFPLEVBQUU7QUFDekIsS0FBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtBQUNwQixPQUFNLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUM7QUFDMUM7O0FBRUEsS0FBSSxPQUFPLEVBQUU7QUFDYjs7QUFFQSxHQUFFLHdCQUF3QixHQUFHO0FBQzdCLEtBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO09BQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDNUU7O0FBRUEsS0FBSSxNQUFNLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDOztLQUVqRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRTtBQUMxQyxPQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUM7O0FBRUEsS0FBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzNCOztBQUVBLEdBQUUsTUFBTSxHQUFHO0FBQ1gsS0FBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDckIsS0FBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztBQUNyRCxLQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQzs7QUFFbkIsS0FBSSxJQUFJLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7O0FBRWpKLEtBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO0FBQzNCLE9BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyw2QkFBNkIsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3RGLE9BQU0sSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLO0FBQy9COztLQUVJLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDdkMsS0FBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDaEQ7O0FBRUE7O0FBRUEsQ0FBQXNCLGFBQWMsR0FBRyxpQkFBaUI7Ozs7Ozs7Ozs7O0FDOVJsQyxDQUFBLFNBQVMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFOztDQUV2USxTQUFTLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sWUFBWSxFQUFFLElBQUksSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLEdBQUcsU0FBUyxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7Q0FFblksTUFBTSxLQUFLLEdBQUcsVUFBZ0I7O0NBRTlCLE1BQU0sTUFBTSxHQUFHL0IsZUFBbUIsRUFBQTs7Q0FFbEMsTUFBTSxRQUFRLEdBQUdRLFVBQXFCO0FBQ3RDLE9BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLO0FBQzVCLE9BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNOztDQUU5QixNQUFNLFNBQVMsR0FBR0MsYUFBa0IsRUFBQTtBQUNwQyxPQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSztBQUM3QixPQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSztBQUM3QixPQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTztBQUNqQyxPQUFNLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSTtBQUMzQixPQUFNLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxnQkFBZ0I7O0FBRW5ELENBQUEsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUU3RSxDQUFBLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFL0UsQ0FBQSxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLEtBQUs7R0FDcEMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxVQUFVLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUM7R0FDckYsT0FBTyxLQUFLLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxTQUFTO0VBQ3RDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztDQUdBLE1BQU0sa0JBQWtCLFNBQVMsTUFBTSxDQUFDO0FBQ3hDLEdBQUUsV0FBVyxDQUFDLElBQUksR0FBRyxFQUFFLEVBQUU7S0FDckIsS0FBSyxDQUFDLElBQUksQ0FBQztBQUNmLEtBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTztBQUMzQixLQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU87QUFDL0IsS0FBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPO0tBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDekcsS0FBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDO0tBQzlDLElBQUksQ0FBQyxJQUFJLEdBQUc7QUFDaEIsT0FBTSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFBSTtNQUM5QjtLQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTztLQUM3QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksS0FBSztBQUM5QyxLQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRTtBQUN6QixLQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTtLQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQ2pDLEtBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO0tBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDekMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUs7S0FDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7S0FDcEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDNUMsS0FBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDNUMsS0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7S0FDMUIsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLElBQUksUUFBUSxDQUFDLEVBQUUsRUFBRTtBQUNuQixLQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRTtBQUNyRTs7R0FFRSxJQUFJLFFBQVEsR0FBRztBQUNqQixLQUFJLElBQUksTUFBTTtBQUNkLEtBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksT0FBTyxJQUFJLENBQUMsR0FBRyxLQUFLLFFBQVEsRUFBRSxNQUFNLEdBQUc7T0FDaEgsS0FBSyxFQUFFLElBQUksQ0FBQztNQUNiO0FBQ0wsS0FBSSxPQUFPLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJO0FBQ2pDLE9BQU0sS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUM7TUFDbEI7QUFDTDs7R0FFRSxVQUFVLENBQUMsQ0FBQyxFQUFFO0FBQ2hCLEtBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO0FBQ25CLEtBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLO0tBQy9HLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDZjs7R0FFRSxRQUFRLENBQUMsRUFBRSxFQUFFO0tBQ1gsSUFBSSxLQUFLLEdBQUcsSUFBSTs7S0FFaEIsT0FBTyxpQkFBaUIsQ0FBQyxhQUFhO0FBQzFDLE9BQU0sTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQzs7QUFFNUUsT0FBTSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDakMsT0FBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssQ0FBQyxFQUFFO0FBQ2xDLE9BQU0sS0FBSyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLE1BQU07QUFDMUQsU0FBUSxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDL0IsU0FBUSxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDckIsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUN2QixRQUFPLENBQUMsQ0FBQztBQUNULE9BQU0sS0FBSyxDQUFDLFVBQVUsR0FBRyxLQUFLO0FBQzlCLE9BQU0sTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7O0FBRW5ELE9BQU0sS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7O09BRTNDLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDaEIsTUFBSyxDQUFDLEVBQUU7QUFDUjs7QUFFQSxHQUFFLEtBQUssR0FBRztBQUNWLEtBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQ25CLEtBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQ3hCLE9BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztPQUMzRCxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ25CLE1BQUssQ0FBQztLQUNGLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxJQUFJLEdBQUc7QUFDVCxLQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7T0FDNUMsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNsQixNQUFLLE1BQU07T0FDTCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSTtBQUNwQyxPQUFNLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSztPQUNwQixJQUFJLENBQUMsSUFBSSxFQUFFO09BQ1gsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNuQixPQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztPQUNwQixJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ2xCO0FBQ0E7O0FBRUEsR0FBRSxLQUFLLEdBQUc7S0FDTixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSTtBQUNuQyxLQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSztLQUNuQixJQUFJLENBQUMsSUFBSSxFQUFFO0tBQ1gsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQixLQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztLQUNwQixJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ2hCOztBQUVBLEdBQUUsTUFBTSxHQUFHO0FBQ1gsS0FBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUk7S0FDaEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUs7S0FDbEMsSUFBSSxDQUFDLElBQUksRUFBRTtLQUNYLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakIsS0FBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7S0FDcEIsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNoQjs7QUFFQSxHQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFO0FBQ1osS0FBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM3QyxLQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDMUMsS0FBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQztBQUMvQixLQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUMxQixJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsTUFBTSxHQUFHO0tBQ1AsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDN0MsS0FBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDakQsS0FBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0tBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLEtBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0tBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO0tBQzdCLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxhQUFhLEdBQUc7QUFDbEIsS0FBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDNUUsS0FBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM3QyxLQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0tBQzFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLEtBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0tBQzFCLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxLQUFLLEdBQUc7QUFDVixLQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0tBQ2xCLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxJQUFJLEdBQUc7S0FDTCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztLQUM1QyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsRUFBRSxHQUFHO0FBQ1AsS0FBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO09BQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2xELE1BQUssTUFBTTtPQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDdEM7O0tBRUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLElBQUksR0FBRztBQUNULEtBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNyRCxPQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLE1BQUssTUFBTTtPQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDdEM7O0tBRUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLElBQUksR0FBRztBQUNULEtBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNyRCxPQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO01BQ25CLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzs7S0FFdkMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLFFBQVEsR0FBRztLQUNULElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDaEYsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLFFBQVEsR0FBRztBQUNiLEtBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztLQUN0RCxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsSUFBSSxHQUFHO0tBQ0wsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUU7S0FDeEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7S0FDN0IsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLEtBQUssR0FBRztBQUNWLEtBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFO0tBQ3hFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO0tBQzdCLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0dBRUUsWUFBWSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUMzQyxLQUFJLElBQUksSUFBSTtBQUNaLEtBQUksSUFBSSxNQUFNLEdBQUcsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEdBQUcsS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEdBQUcsR0FBRztBQUM1RSxLQUFJLElBQUksS0FBSyxHQUFHLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSztBQUNuRSxLQUFJLE1BQU0sR0FBRyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLE1BQU07O0FBRTFFLEtBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFO09BQ2pCLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7O0FBRWxDLE9BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1NBQzdHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUU7V0FDaEMsTUFBTSxFQUFFLENBQUM7QUFDbkIsV0FBVSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUMxQixVQUFTLENBQUM7QUFDVjtBQUNBOztBQUVBLEtBQUksT0FBTyxNQUFNLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7QUFDeEQ7O0FBRUEsR0FBRSxNQUFNLEdBQUc7QUFDWCxLQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNyQixLQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQy9HLEtBQUssQ0FBQyxNQUFNLEVBQUU7O0FBRWxCLEtBQUksSUFBSSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUYsU0FBUSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsVUFBVTtBQUNqRCxTQUFRLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxRQUFROztBQUU3QyxLQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDOztBQUVsUixLQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ3BCLE9BQU0sTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxLQUFLLFFBQVEsR0FBRyxDQUFDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO09BQ25QLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxXQUFXLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hGOztLQUVJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQy9EOztBQUVBOztBQUVBLENBQUF1QixjQUFjLEdBQUcsa0JBQWtCOzs7Ozs7Ozs7OztDQzFSbkMsTUFBTSxLQUFLLEdBQUcsVUFBZ0I7O0NBRTlCLE1BQU0sUUFBUSxHQUFHaEMsVUFBcUI7QUFDdEMsT0FBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU07O0NBRTlCLE1BQU0saUJBQWlCLEdBQUdRLG9CQUF3QixFQUFBOztDQUVsRCxNQUFNLFNBQVMsR0FBR0MsYUFBa0IsRUFBQTtBQUNwQyxPQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSztBQUM3QixPQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSztBQUM3QixPQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztDQUdBLE1BQU0sNkJBQTZCLFNBQVMsaUJBQWlCLENBQUM7QUFDOUQsR0FBRSxXQUFXLENBQUMsSUFBSSxHQUFHLEVBQUUsRUFBRTtBQUN6QixLQUFJLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSTtLQUMxQixLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ2YsS0FBSSxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUU7QUFDeEIsS0FBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDNUMsS0FBSSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLO0tBQ2pDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxJQUFJLEdBQUc7S0FDTCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUM7S0FDN0MsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLElBQUksR0FBRztBQUNULEtBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTTtLQUM3RCxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsRUFBRSxHQUFHO0FBQ1AsS0FBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO09BQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQztBQUNuRCxNQUFLLE1BQU07T0FDTCxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ25COztLQUVJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxJQUFJLEdBQUc7QUFDVCxLQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDekQsT0FBTSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7QUFDckIsTUFBSyxNQUFNO09BQ0wsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNuQjs7S0FFSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsSUFBSSxHQUFHO0tBQ0wsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUs7S0FDbEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLEtBQUssR0FBRztLQUNOLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUU7S0FDcEYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUk7S0FDakQsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLE1BQU0sR0FBRztBQUNYLEtBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtBQUNoQyxPQUFNLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztPQUN2RSxJQUFJLENBQUMscUJBQXFCLEVBQUU7QUFDbEM7QUFDQTs7QUFFQSxHQUFFLHFCQUFxQixHQUFHO0tBQ3RCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0tBQzFELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJO0FBQ2xELE9BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQzNCLFNBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFO0FBQ3pDLFdBQVUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUU7QUFDN0UsYUFBWSxPQUFPLElBQUk7QUFDdkI7QUFDQTs7QUFFQSxTQUFRLElBQUksT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUN6QyxXQUFVLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFO0FBQzdFLGFBQVksT0FBTyxJQUFJO0FBQ3ZCO0FBQ0E7O0FBRUEsU0FBUSxPQUFPLEtBQUs7QUFDcEI7O0FBRUEsT0FBTSxPQUFPLElBQUk7QUFDakIsTUFBSyxDQUFDO0FBQ04sS0FBSSxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssZ0JBQWdCLENBQUM7S0FDckYsSUFBSSxDQUFDLE1BQU0sR0FBRyxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGlCQUFpQjtLQUMzRCxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsaUJBQWlCLEdBQUc7S0FDbEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDOztBQUUvQyxLQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTtBQUNwQixPQUFNLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSztPQUNsQixJQUFJLENBQUMsTUFBTSxFQUFFO01BQ2QsTUFBTSxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUMzRixPQUFNLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRTtBQUN4QixNQUFLLE1BQU07QUFDWCxPQUFNLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSTtPQUNqQixJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ25CO0FBQ0E7O0dBRUUsaUJBQWlCLENBQUMsQ0FBQyxFQUFFO0tBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDO0tBQ3JDLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtBQUNoQzs7QUFFQSxHQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFO0FBQ1osS0FBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7T0FDYixJQUFJLENBQUMsaUJBQWlCLEVBQUU7QUFDOUIsTUFBSyxNQUFNO0FBQ1gsT0FBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBQy9CO0FBQ0E7O0FBRUEsR0FBRSxrQkFBa0IsR0FBRztLQUNuQixJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDOUQsT0FBTSxJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxRQUFRLEVBQUU7U0FDekMsT0FBTyxJQUFJLENBQUMsWUFBWTtBQUNoQzs7QUFFQSxPQUFNLE9BQU87QUFDYjtBQUNBLElBQUksRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQzNDLElBQUksRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDO0FBQzlDO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUEsS0FBSSxPQUFPLEVBQUU7QUFDYjs7QUFFQSxHQUFFLGtCQUFrQixHQUFHO0FBQ3ZCLEtBQUksT0FBTztBQUNYLHNCQUFzQixFQUFFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3ZHOztBQUVBLEdBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzdCLEtBQUksSUFBSSxLQUFLO0tBQ1QsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssS0FBSyxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUs7S0FDbEwsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLEdBQUcsS0FBSztBQUN4Rjs7QUFFQSxHQUFFLHdCQUF3QixHQUFHO0FBQzdCLEtBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO09BQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDNUU7O0tBRUksTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzs7QUFFaEcsS0FBSSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRTtBQUNuRixPQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUM7O0FBRUEsS0FBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzNCOztBQUVBLEdBQUUsTUFBTSxHQUFHO0FBQ1gsS0FBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDckIsS0FBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztBQUNyRCxLQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQzs7QUFFbkIsS0FBSSxJQUFJLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7O0FBRWpKLEtBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO0FBQzNCLE9BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyw2QkFBNkIsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3RGLE9BQU0sSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLO0FBQy9COztLQUVJLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7S0FDbEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDdkMsS0FBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDaEQ7O0FBRUE7O0FBRUEsQ0FBQXdCLHlCQUFjLEdBQUcsNkJBQTZCOzs7Ozs7Ozs7OztDQ3RNOUMsTUFBTSxLQUFLLEdBQUcsVUFBZ0I7O0NBRTlCLE1BQU0sTUFBTSxHQUFHakMsZUFBbUIsRUFBQTs7Q0FFbEMsTUFBTSxRQUFRLEdBQUdRLGFBQWtCLEVBQUE7QUFDbkMsT0FBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUs7QUFDNUIsT0FBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUs7O0NBRTVCLE1BQU0sU0FBUyxHQUFHLFVBQXFCO0FBQ3ZDLE9BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLO0FBQzdCLE9BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0NBR0EsTUFBTSxhQUFhLFNBQVMsTUFBTSxDQUFDO0FBQ25DLEdBQUUsV0FBVyxDQUFDLElBQUksR0FBRyxFQUFFLEVBQUU7S0FDckIsS0FBSyxDQUFDLElBQUksQ0FBQztBQUNmLEtBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTztBQUMzQixLQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU87S0FDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU87S0FDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUs7S0FDL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLE9BQU87S0FDMUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUk7S0FDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLE9BQU87S0FDeEMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLEtBQUssR0FBRztBQUNWLEtBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWTtLQUM5QixJQUFJLENBQUMsSUFBSSxFQUFFO0tBQ1gsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLElBQUksR0FBRztLQUNMLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDaEI7O0FBRUEsR0FBRSxLQUFLLEdBQUc7S0FDTixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSTtLQUMvQixJQUFJLENBQUMsSUFBSSxFQUFFO0tBQ1gsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQixLQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztLQUNwQixJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ2hCOztBQUVBLEdBQUUsTUFBTSxHQUFHO0tBQ1AsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUs7QUFDcEMsS0FBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUk7QUFDcEIsS0FBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUs7S0FDcEIsSUFBSSxDQUFDLElBQUksRUFBRTtLQUNYLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakIsS0FBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7S0FDcEIsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNoQjs7QUFFQSxHQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFO0FBQ1osS0FBSSxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxHQUFHLEVBQUU7QUFDakMsT0FBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUk7QUFDdkIsT0FBTSxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDMUI7O0FBRUEsS0FBSSxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxHQUFHLEVBQUU7QUFDakMsT0FBTSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUs7QUFDeEIsT0FBTSxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDMUI7O0FBRUEsS0FBSSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDdEI7O0FBRUEsR0FBRSxNQUFNLEdBQUc7QUFDWCxLQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNyQixLQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQy9HLEtBQUssQ0FBQyxNQUFNLEVBQUU7QUFDbEIsS0FBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7S0FDek8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDL0Q7O0FBRUE7O0FBRUEsQ0FBQTBCLFNBQWMsR0FBRyxhQUFhOzs7Ozs7Ozs7OztBQzFGOUIsQ0FBQUMsVUFBYyxHQUFHO0dBQ2YsVUFBVSxFQUFFcEMsYUFBaUIsRUFBQTtHQUM3QixZQUFZLEVBQUVDLGVBQW1CLEVBQUE7R0FDakMsWUFBWSxFQUFFUSxlQUFtQixFQUFBO0dBQ2pDLFVBQVUsRUFBRUMsYUFBaUIsRUFBQTtHQUM3QixZQUFZLEVBQUVDLGVBQW1CLEVBQUE7R0FDakMsaUJBQWlCLEVBQUVDLG9CQUF3QixFQUFBO0dBQzNDLGtCQUFrQixFQUFFQyxxQkFBeUIsRUFBQTtHQUM3Qyw2QkFBNkIsRUFBRUMsZ0NBQW9DLEVBQUE7QUFDckUsR0FBRSxhQUFhLEVBQUVlLGdCQUFBO0VBQ2hCOzs7Ozs7Ozs7OztFQ1ZELE1BQU0sQ0FBQyxHQUFHLE9BQU87O0VBRWpCLE1BQU0sRUFBRSxHQUFHN0IsaUJBQXFCLEVBQUE7O0FBRWhDLEVBQUEsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUM7O0VBRW5CLFNBQVMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRTtJQUN2QyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSztNQUMvQixNQUFNLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDaEMsTUFBSSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUk7QUFDeEMsTUFBSSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUk7QUFDMUMsTUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUk7TUFDbEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUM7QUFDdkMsTUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLE1BQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQyxNQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsS0FBRyxDQUFDO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7RUFHQSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxRQUFRLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsRUFBQSxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksSUFBSTtBQUNyQixJQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVTtBQUN6QixJQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7R0FDcEI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsRUFBQSxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSTtBQUN0QixJQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsV0FBVztBQUMxQixJQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7R0FDcEI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0VBR0EsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLElBQUksUUFBUSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztFQUdBLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLFFBQVEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0VBR0EsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLElBQUksUUFBUSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUM7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsRUFBQSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSTtBQUNqQixJQUFFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksR0FBRztBQUNuQyxJQUFFLE9BQU8sUUFBUSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUU7QUFDdEMsTUFBSSxRQUFRLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFO0FBQ3JELEtBQUcsQ0FBQztHQUNIO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0VBR0EsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLElBQUksUUFBUSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0VBR0EsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLElBQUksUUFBUSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxFQUFBLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxJQUFJO0FBQ3hCLElBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDOztJQUU1QyxNQUFNLFVBQVUsR0FBRyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQzs7QUFFekYsSUFBRSxPQUFPLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLEVBQUU7TUFDekMsT0FBTyxFQUFFLFVBQVU7QUFDdkIsTUFBSSxRQUFRLEVBQUU7QUFDZCxLQUFHLENBQUM7R0FDSDs7QUFFRCxFQUFBLENBQUMsQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLElBQUk7QUFDcEMsSUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7O0lBRTVDLE1BQU0sVUFBVSxHQUFHLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDOztBQUV6RixJQUFFLE9BQU8sUUFBUSxDQUFDLCtCQUErQixFQUFFLElBQUksRUFBRTtNQUNyRCxPQUFPLEVBQUUsVUFBVTtBQUN2QixNQUFJLFFBQVEsRUFBRTtBQUNkLEtBQUcsQ0FBQztHQUNIOztBQUVELEVBQUEsTUFBTSxPQUFPLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxLQUFLLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUNwSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLEVBQUEsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLElBQUk7SUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU87QUFDeEMsSUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDOUMsSUFBRSxPQUFPLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUM7R0FDNUMsQ0FBQTs7Ozs7Ozs7Ozs7O0FDM05ELENBQUEsU0FBUyxPQUFPLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxFQUFFLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksY0FBYyxFQUFFLEVBQUUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLEVBQUUsRUFBRSxPQUFPLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sSUFBSSxDQUFDOztBQUV2VixDQUFBLFNBQVMsYUFBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLEVBQUUsRUFBRSxlQUFlLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sSUFBSSxNQUFNLENBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLEVBQUUsRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sTUFBTSxDQUFDOztDQUVwaEIsU0FBUyxlQUFlLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEdBQUcsQ0FBQzs7QUFFL00sQ0FBQSxTQUFTLDBCQUEwQixDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLGNBQW1ELEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLHVJQUF1SSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxFQUFFLE1BQU0sR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQzs7Q0FFcCtCLFNBQVMsMkJBQTJCLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLE9BQU8saUJBQWlCLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcs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QyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5RDtLQUNJLEtBQUssQ0FBQyxNQUFNLEVBQUU7QUFDbEIsS0FBSSxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUU7O0tBRXJCLElBQUksQ0FBQyxVQUFVLEdBQUc7T0FDaEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDM0MsT0FBTSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDMUIsT0FBTSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDaEMsT0FBTSxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqRCxNQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRWYsS0FBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDcEIsT0FBTSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2xELFlBQVcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEc7O0FBRUEsS0FBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFD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SSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO0FBQzFFLFFBQVEsT0FBTyxJQUFJLENBQUMsTUFBTTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLE9BQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxHQUFHLENBQUMsRUFBRTtBQUN2QyxRQUFRLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDckIsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLEtBQUssQ0FBQyxHQUFHLEVBQUU7QUFDdEIsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLEtBQUssQ0FBQyxHQUFHLEVBQUU7QUFDdEIsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLEtBQUssQ0FBQyxHQUFHLEVBQUU7QUFDdEIsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO0FBQ3BDO0FBQ0EsSUFBSSxPQUFPLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRTtBQUNuQyxRQUFRLE1BQU0sR0FBRyxPQUFPLE1BQU0sS0FBSyxRQUFRLEdBQUcs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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMxVkE7OztBQUdHO0FBQ0gsTUFBTSxNQUFNLEdBQUc7QUFDYixJQUFBLGdCQUFnQjtBQUNoQixJQUFBLGdCQUFnQjtBQUNoQixJQUFBLGdCQUFnQjtBQUNoQixJQUFBLGdCQUFnQjtBQUNoQixJQUFBLGdCQUFnQjtBQUNoQixJQUFBLGdCQUFnQjtBQUNoQixJQUFBLGdCQUFnQjtBQUNoQixJQUFBLGdCQUFnQjtBQUNoQixJQUFBLGdCQUFnQjtDQUNqQjtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVCRztBQUNHLFNBQVUsV0FBVyxDQUFDLE1BQWUsRUFBQTtBQUN6QyxJQUFBLE1BQU0sT0FBTyxHQUFHLFNBQVMsRUFB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LEVBQUUsSUFBSSxDQUFDO0FBQ3JCLFNBQUMsQ0FBQzs7SUFHTSxNQUFNLEdBQUcsQ0FDakIsT0FDd0UsRUFBQTtRQUV4RSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsT0FBTztRQUU3QyxJQUFJLFFBQVEsRUFBRTtBQUNaLFlBQUEsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFOztRQUc1QixJQUFJLEdBQUcsRUFBRTtBQUNQLFlBQUEsT0FBTyxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUU7O1FBRTlCLElBQUksSUFBSSxFQUFFO0FBQ1IsWUFBQSxPQUFPLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRTs7UUFFL0IsSUFBSSxJQUFJLEVBQUU7QUFDUixZQUFBLE9BQU8sTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFOzs7QUFHbEM7O0FDbmlCRCxJQUFJLFlBQVk7QUFDYixLQUFBLE9BQU87QUFDUCxLQUFBLElBQUksQ0FBQyxNQUFNLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDO0FBQy9ELEtBQUEsS0FBSyxDQUFDLENBQUMsQ0FBVSxLQUFJO0lBQ3BCLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQTJCLHdCQUFBLEVBQUEsQ0FBQyxDQUFFLENBQUEsQ0FBQztBQUN0RCxJQUFBLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLENBQUMsQ0FBQzs7IiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzldfQ==
10348
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtc2NyaXB0cy5janMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvdXRpbC9hY3Rpb24uanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L3V0aWwvc3RyaXAuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L3V0aWwvY2xlYXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L3V0aWwvZmlndXJlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvdXRpbC9zdHlsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvdXRpbC9saW5lcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvdXRpbC93cmFwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC91dGlsL2VudHJpZXNUb0Rpc3BsYXkuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L3V0aWwvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2VsZW1lbnRzL3Byb21wdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZWxlbWVudHMvdGV4dC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZWxlbWVudHMvc2VsZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy90b2dnbGUuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2RhdGVwYXJ0cy9kYXRlcGFydC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZGF0ZXBhcnRzL21lcmlkaWVtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9kYXRlcGFydHMvZGF5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9kYXRlcGFydHMvaG91cnMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2RhdGVwYXJ0cy9taWxsaXNlY29uZHMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2RhdGVwYXJ0cy9taW51dGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9kYXRlcGFydHMvbW9udGguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2RhdGVwYXJ0cy9zZWNvbmRzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9kYXRlcGFydHMveWVhci5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZGF0ZXBhcnRzL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy9kYXRlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy9udW1iZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2VsZW1lbnRzL211bHRpc2VsZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy9hdXRvY29tcGxldGUuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2VsZW1lbnRzL2F1dG9jb21wbGV0ZU11bHRpc2VsZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy9jb25maXJtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvcHJvbXB0cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvdXRpbC9hY3Rpb24uanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvdXRpbC9zdHJpcC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi91dGlsL2NsZWFyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL3V0aWwvZmlndXJlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi91dGlsL3N0eWxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL3V0aWwvbGluZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvdXRpbC93cmFwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL3V0aWwvZW50cmllc1RvRGlzcGxheS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi91dGlsL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2VsZW1lbnRzL3Byb21wdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9lbGVtZW50cy90ZXh0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2VsZW1lbnRzL3NlbGVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9lbGVtZW50cy90b2dnbGUuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZGF0ZXBhcnRzL2RhdGVwYXJ0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2RhdGVwYXJ0cy9tZXJpZGllbS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMvZGF5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2RhdGVwYXJ0cy9ob3Vycy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMvbWlsbGlzZWNvbmRzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2RhdGVwYXJ0cy9taW51dGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2RhdGVwYXJ0cy9tb250aC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMvc2Vjb25kcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMveWVhci5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZWxlbWVudHMvZGF0ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9lbGVtZW50cy9udW1iZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZWxlbWVudHMvbXVsdGlzZWxlY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZWxlbWVudHMvYXV0b2NvbXBsZXRlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2VsZW1lbnRzL2F1dG9jb21wbGV0ZU11bHRpc2VsZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2VsZW1lbnRzL2NvbmZpcm0uanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZWxlbWVudHMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvcHJvbXB0cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BkZWNhZi10cy9sb2dnaW5nL2xpYi9lc20vY29uc3RhbnRzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3N0eWxlZC1zdHJpbmctYnVpbGRlci9saWIvZXNtL2NvbnN0YW50cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9zdHlsZWQtc3RyaW5nLWJ1aWxkZXIvbGliL2VzbS9jb2xvcnMuanMiLCIuLi9ub2RlX21vZHVsZXMvc3R5bGVkLXN0cmluZy1idWlsZGVyL2xpYi9lc20vc3RyaW5ncy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGVjYWYtdHMvbG9nZ2luZy9saWIvZXNtL2xvZ2dpbmcuanMiLCIuLi9zcmMvaW5wdXQvaW5wdXQudHMiLCIuLi9zcmMvY2xpL2NvbnN0YW50cy50cyIsIi4uL3NyYy91dGlscy90ZXh0LnRzIiwiLi4vc3JjL3V0aWxzL2NvbnN0YW50cy50cyIsIi4uL3NyYy93cml0ZXJzL1N0YW5kYXJkT3V0cHV0V3JpdGVyLnRzIiwiLi4vc3JjL3V0aWxzL3V0aWxzLnRzIiwiLi4vc3JjL3V0aWxzL2ZzLnRzIiwiLi4vc3JjL291dHB1dC9jb21tb24udHMiLCIuLi9zcmMvdXRpbHMvd2ViLnRzIiwiLi4vbm9kZV9tb2R1bGVzL3R5cGVkLW9iamVjdC1hY2N1bXVsYXRvci9saWIvZXNtL2FjY3VtdWxhdG9yLmpzIiwiLi4vc3JjL3V0aWxzL2Vudmlyb25tZW50LnRzIiwiLi4vc3JjL2NsaS9jb21tYW5kLnRzIiwiLi4vc3JjL3V0aWxzL2h0dHAudHMiLCIuLi9zcmMvY2xpL2NvbW1hbmRzL2J1aWxkLXNjcmlwdHMudHMiLCIuLi9zcmMvYmluL2J1aWxkLXNjcmlwdHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChrZXksIGlzU2VsZWN0KSA9PiB7XG4gIGlmIChrZXkubWV0YSAmJiBrZXkubmFtZSAhPT0gJ2VzY2FwZScpIHJldHVybjtcblxuICBpZiAoa2V5LmN0cmwpIHtcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdhJykgcmV0dXJuICdmaXJzdCc7XG4gICAgaWYgKGtleS5uYW1lID09PSAnYycpIHJldHVybiAnYWJvcnQnO1xuICAgIGlmIChrZXkubmFtZSA9PT0gJ2QnKSByZXR1cm4gJ2Fib3J0JztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdlJykgcmV0dXJuICdsYXN0JztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdnJykgcmV0dXJuICdyZXNldCc7XG4gIH1cblxuICBpZiAoaXNTZWxlY3QpIHtcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdqJykgcmV0dXJuICdkb3duJztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdrJykgcmV0dXJuICd1cCc7XG4gIH1cblxuICBpZiAoa2V5Lm5hbWUgPT09ICdyZXR1cm4nKSByZXR1cm4gJ3N1Ym1pdCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2VudGVyJykgcmV0dXJuICdzdWJtaXQnOyAvLyBjdHJsICsgSlxuXG4gIGlmIChrZXkubmFtZSA9PT0gJ2JhY2tzcGFjZScpIHJldHVybiAnZGVsZXRlJztcbiAgaWYgKGtleS5uYW1lID09PSAnZGVsZXRlJykgcmV0dXJuICdkZWxldGVGb3J3YXJkJztcbiAgaWYgKGtleS5uYW1lID09PSAnYWJvcnQnKSByZXR1cm4gJ2Fib3J0JztcbiAgaWYgKGtleS5uYW1lID09PSAnZXNjYXBlJykgcmV0dXJuICdleGl0JztcbiAgaWYgKGtleS5uYW1lID09PSAndGFiJykgcmV0dXJuICduZXh0JztcbiAgaWYgKGtleS5uYW1lID09PSAncGFnZWRvd24nKSByZXR1cm4gJ25leHRQYWdlJztcbiAgaWYgKGtleS5uYW1lID09PSAncGFnZXVwJykgcmV0dXJuICdwcmV2UGFnZSc7IC8vIFRPRE8gY3JlYXRlIGhvbWUoKSBpbiBwcm9tcHQgdHlwZXMgKGUuZy4gVGV4dFByb21wdClcblxuICBpZiAoa2V5Lm5hbWUgPT09ICdob21lJykgcmV0dXJuICdob21lJzsgLy8gVE9ETyBjcmVhdGUgZW5kKCkgaW4gcHJvbXB0IHR5cGVzIChlLmcuIFRleHRQcm9tcHQpXG5cbiAgaWYgKGtleS5uYW1lID09PSAnZW5kJykgcmV0dXJuICdlbmQnO1xuICBpZiAoa2V5Lm5hbWUgPT09ICd1cCcpIHJldHVybiAndXAnO1xuICBpZiAoa2V5Lm5hbWUgPT09ICdkb3duJykgcmV0dXJuICdkb3duJztcbiAgaWYgKGtleS5uYW1lID09PSAncmlnaHQnKSByZXR1cm4gJ3JpZ2h0JztcbiAgaWYgKGtleS5uYW1lID09PSAnbGVmdCcpIHJldHVybiAnbGVmdCc7XG4gIHJldHVybiBmYWxzZTtcbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0ciA9PiB7XG4gIGNvbnN0IHBhdHRlcm4gPSBbJ1tcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNyknLCAnKD86KD86XFxcXGR7MSw0fSg/OjtcXFxcZHswLDR9KSopP1tcXFxcZEEtUFJaY2YtbnRxcnk9Pjx+XSkpJ10uam9pbignfCcpO1xuICBjb25zdCBSR1ggPSBuZXcgUmVnRXhwKHBhdHRlcm4sICdnJyk7XG4gIHJldHVybiB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJyA/IHN0ci5yZXBsYWNlKFJHWCwgJycpIDogc3RyO1xufTsiLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKG8sIGFsbG93QXJyYXlMaWtlKSB7IHZhciBpdCA9IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdIHx8IG9bXCJAQGl0ZXJhdG9yXCJdOyBpZiAoIWl0KSB7IGlmIChBcnJheS5pc0FycmF5KG8pIHx8IChpdCA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvKSkgfHwgYWxsb3dBcnJheUxpa2UgJiYgbyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHsgaWYgKGl0KSBvID0gaXQ7IHZhciBpID0gMDsgdmFyIEYgPSBmdW5jdGlvbiBGKCkge307IHJldHVybiB7IHM6IEYsIG46IGZ1bmN0aW9uIG4oKSB7IGlmIChpID49IG8ubGVuZ3RoKSByZXR1cm4geyBkb25lOiB0cnVlIH07IHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogb1tpKytdIH07IH0sIGU6IGZ1bmN0aW9uIGUoX2UpIHsgdGhyb3cgX2U7IH0sIGY6IEYgfTsgfSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH0gdmFyIG5vcm1hbENvbXBsZXRpb24gPSB0cnVlLCBkaWRFcnIgPSBmYWxzZSwgZXJyOyByZXR1cm4geyBzOiBmdW5jdGlvbiBzKCkgeyBpdCA9IGl0LmNhbGwobyk7IH0sIG46IGZ1bmN0aW9uIG4oKSB7IHZhciBzdGVwID0gaXQubmV4dCgpOyBub3JtYWxDb21wbGV0aW9uID0gc3RlcC5kb25lOyByZXR1cm4gc3RlcDsgfSwgZTogZnVuY3Rpb24gZShfZTIpIHsgZGlkRXJyID0gdHJ1ZTsgZXJyID0gX2UyOyB9LCBmOiBmdW5jdGlvbiBmKCkgeyB0cnkgeyBpZiAoIW5vcm1hbENvbXBsZXRpb24gJiYgaXQucmV0dXJuICE9IG51bGwpIGl0LnJldHVybigpOyB9IGZpbmFsbHkgeyBpZiAoZGlkRXJyKSB0aHJvdyBlcnI7IH0gfSB9OyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldOyByZXR1cm4gYXJyMjsgfVxuXG5jb25zdCBzdHJpcCA9IHJlcXVpcmUoJy4vc3RyaXAnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBlcmFzZSA9IF9yZXF1aXJlLmVyYXNlLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUuY3Vyc29yO1xuXG5jb25zdCB3aWR0aCA9IHN0ciA9PiBbLi4uc3RyaXAoc3RyKV0ubGVuZ3RoO1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvbXB0XG4gKiBAcGFyYW0ge251bWJlcn0gcGVyTGluZVxuICovXG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocHJvbXB0LCBwZXJMaW5lKSB7XG4gIGlmICghcGVyTGluZSkgcmV0dXJuIGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCk7XG4gIGxldCByb3dzID0gMDtcbiAgY29uc3QgbGluZXMgPSBwcm9tcHQuc3BsaXQoL1xccj9cXG4vKTtcblxuICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIobGluZXMpLFxuICAgICAgX3N0ZXA7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgbGV0IGxpbmUgPSBfc3RlcC52YWx1ZTtcbiAgICAgIHJvd3MgKz0gMSArIE1hdGguZmxvb3IoTWF0aC5tYXgod2lkdGgobGluZSkgLSAxLCAwKSAvIHBlckxpbmUpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2l0ZXJhdG9yLmUoZXJyKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBfaXRlcmF0b3IuZigpO1xuICB9XG5cbiAgcmV0dXJuIGVyYXNlLmxpbmVzKHJvd3MpO1xufTsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IG1haW4gPSB7XG4gIGFycm93VXA6ICfihpEnLFxuICBhcnJvd0Rvd246ICfihpMnLFxuICBhcnJvd0xlZnQ6ICfihpAnLFxuICBhcnJvd1JpZ2h0OiAn4oaSJyxcbiAgcmFkaW9PbjogJ+KXiScsXG4gIHJhZGlvT2ZmOiAn4pevJyxcbiAgdGljazogJ+KclCcsXG4gIGNyb3NzOiAn4pyWJyxcbiAgZWxsaXBzaXM6ICfigKYnLFxuICBwb2ludGVyU21hbGw6ICfigLonLFxuICBsaW5lOiAn4pSAJyxcbiAgcG9pbnRlcjogJ+Kdrydcbn07XG5jb25zdCB3aW4gPSB7XG4gIGFycm93VXA6IG1haW4uYXJyb3dVcCxcbiAgYXJyb3dEb3duOiBtYWluLmFycm93RG93bixcbiAgYXJyb3dMZWZ0OiBtYWluLmFycm93TGVmdCxcbiAgYXJyb3dSaWdodDogbWFpbi5hcnJvd1JpZ2h0LFxuICByYWRpb09uOiAnKCopJyxcbiAgcmFkaW9PZmY6ICcoICknLFxuICB0aWNrOiAn4oiaJyxcbiAgY3Jvc3M6ICfDlycsXG4gIGVsbGlwc2lzOiAnLi4uJyxcbiAgcG9pbnRlclNtYWxsOiAnwrsnLFxuICBsaW5lOiAn4pSAJyxcbiAgcG9pbnRlcjogJz4nXG59O1xuY29uc3QgZmlndXJlcyA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyB3aW4gOiBtYWluO1xubW9kdWxlLmV4cG9ydHMgPSBmaWd1cmVzOyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgYyA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5cbmNvbnN0IGZpZ3VyZXMgPSByZXF1aXJlKCcuL2ZpZ3VyZXMnKTsgLy8gcmVuZGVyaW5nIHVzZXIgaW5wdXQuXG5cblxuY29uc3Qgc3R5bGVzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHBhc3N3b3JkOiB7XG4gICAgc2NhbGU6IDEsXG4gICAgcmVuZGVyOiBpbnB1dCA9PiAnKicucmVwZWF0KGlucHV0Lmxlbmd0aClcbiAgfSxcbiAgZW1vamk6IHtcbiAgICBzY2FsZTogMixcbiAgICByZW5kZXI6IGlucHV0ID0+ICfwn5iDJy5yZXBlYXQoaW5wdXQubGVuZ3RoKVxuICB9LFxuICBpbnZpc2libGU6IHtcbiAgICBzY2FsZTogMCxcbiAgICByZW5kZXI6IGlucHV0ID0+ICcnXG4gIH0sXG4gIGRlZmF1bHQ6IHtcbiAgICBzY2FsZTogMSxcbiAgICByZW5kZXI6IGlucHV0ID0+IGAke2lucHV0fWBcbiAgfVxufSk7XG5cbmNvbnN0IHJlbmRlciA9IHR5cGUgPT4gc3R5bGVzW3R5cGVdIHx8IHN0eWxlcy5kZWZhdWx0OyAvLyBpY29uIHRvIHNpZ25hbGl6ZSBhIHByb21wdC5cblxuXG5jb25zdCBzeW1ib2xzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIGFib3J0ZWQ6IGMucmVkKGZpZ3VyZXMuY3Jvc3MpLFxuICBkb25lOiBjLmdyZWVuKGZpZ3VyZXMudGljayksXG4gIGV4aXRlZDogYy55ZWxsb3coZmlndXJlcy5jcm9zcyksXG4gIGRlZmF1bHQ6IGMuY3lhbignPycpXG59KTtcblxuY29uc3Qgc3ltYm9sID0gKGRvbmUsIGFib3J0ZWQsIGV4aXRlZCkgPT4gYWJvcnRlZCA/IHN5bWJvbHMuYWJvcnRlZCA6IGV4aXRlZCA/IHN5bWJvbHMuZXhpdGVkIDogZG9uZSA/IHN5bWJvbHMuZG9uZSA6IHN5bWJvbHMuZGVmYXVsdDsgLy8gYmV0d2VlbiB0aGUgcXVlc3Rpb24gYW5kIHRoZSB1c2VyJ3MgaW5wdXQuXG5cblxuY29uc3QgZGVsaW1pdGVyID0gY29tcGxldGluZyA9PiBjLmdyYXkoY29tcGxldGluZyA/IGZpZ3VyZXMuZWxsaXBzaXMgOiBmaWd1cmVzLnBvaW50ZXJTbWFsbCk7XG5cbmNvbnN0IGl0ZW0gPSAoZXhwYW5kYWJsZSwgZXhwYW5kZWQpID0+IGMuZ3JheShleHBhbmRhYmxlID8gZXhwYW5kZWQgPyBmaWd1cmVzLnBvaW50ZXJTbWFsbCA6ICcrJyA6IGZpZ3VyZXMubGluZSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdHlsZXMsXG4gIHJlbmRlcixcbiAgc3ltYm9scyxcbiAgc3ltYm9sLFxuICBkZWxpbWl0ZXIsXG4gIGl0ZW1cbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBzdHJpcCA9IHJlcXVpcmUoJy4vc3RyaXAnKTtcbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1zZ1xuICogQHBhcmFtIHtudW1iZXJ9IHBlckxpbmVcbiAqL1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1zZywgcGVyTGluZSkge1xuICBsZXQgbGluZXMgPSBTdHJpbmcoc3RyaXAobXNnKSB8fCAnJykuc3BsaXQoL1xccj9cXG4vKTtcbiAgaWYgKCFwZXJMaW5lKSByZXR1cm4gbGluZXMubGVuZ3RoO1xuICByZXR1cm4gbGluZXMubWFwKGwgPT4gTWF0aC5jZWlsKGwubGVuZ3RoIC8gcGVyTGluZSkpLnJlZHVjZSgoYSwgYikgPT4gYSArIGIpO1xufTsiLCIndXNlIHN0cmljdCc7XG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBtc2cgVGhlIG1lc3NhZ2UgdG8gd3JhcFxuICogQHBhcmFtIHtvYmplY3R9IG9wdHNcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gW29wdHMubWFyZ2luXSBMZWZ0IG1hcmdpblxuICogQHBhcmFtIHtudW1iZXJ9IG9wdHMud2lkdGggTWF4aW11bSBjaGFyYWN0ZXJzIHBlciBsaW5lIGluY2x1ZGluZyB0aGUgbWFyZ2luXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSAobXNnLCBvcHRzID0ge30pID0+IHtcbiAgY29uc3QgdGFiID0gTnVtYmVyLmlzU2FmZUludGVnZXIocGFyc2VJbnQob3B0cy5tYXJnaW4pKSA/IG5ldyBBcnJheShwYXJzZUludChvcHRzLm1hcmdpbikpLmZpbGwoJyAnKS5qb2luKCcnKSA6IG9wdHMubWFyZ2luIHx8ICcnO1xuICBjb25zdCB3aWR0aCA9IG9wdHMud2lkdGg7XG4gIHJldHVybiAobXNnIHx8ICcnKS5zcGxpdCgvXFxyP1xcbi9nKS5tYXAobGluZSA9PiBsaW5lLnNwbGl0KC9cXHMrL2cpLnJlZHVjZSgoYXJyLCB3KSA9PiB7XG4gICAgaWYgKHcubGVuZ3RoICsgdGFiLmxlbmd0aCA+PSB3aWR0aCB8fCBhcnJbYXJyLmxlbmd0aCAtIDFdLmxlbmd0aCArIHcubGVuZ3RoICsgMSA8IHdpZHRoKSBhcnJbYXJyLmxlbmd0aCAtIDFdICs9IGAgJHt3fWA7ZWxzZSBhcnIucHVzaChgJHt0YWJ9JHt3fWApO1xuICAgIHJldHVybiBhcnI7XG4gIH0sIFt0YWJdKS5qb2luKCdcXG4nKSkuam9pbignXFxuJyk7XG59OyIsIid1c2Ugc3RyaWN0Jztcbi8qKlxuICogRGV0ZXJtaW5lIHdoYXQgZW50cmllcyBzaG91bGQgYmUgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW4sIGJhc2VkIG9uIHRoZVxuICogY3VycmVudGx5IHNlbGVjdGVkIGluZGV4IGFuZCB0aGUgbWF4aW11bSB2aXNpYmxlLiBVc2VkIGluIGxpc3QtYmFzZWRcbiAqIHByb21wdHMgbGlrZSBgc2VsZWN0YCBhbmQgYG11bHRpc2VsZWN0YC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gY3Vyc29yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZW50cnlcbiAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbCB0aGUgdG90YWwgZW50cmllcyBhdmFpbGFibGUgdG8gZGlzcGxheVxuICogQHBhcmFtIHtudW1iZXJ9IFttYXhWaXNpYmxlXSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhhdCBjYW4gYmUgZGlzcGxheWVkXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSAoY3Vyc29yLCB0b3RhbCwgbWF4VmlzaWJsZSkgPT4ge1xuICBtYXhWaXNpYmxlID0gbWF4VmlzaWJsZSB8fCB0b3RhbDtcbiAgbGV0IHN0YXJ0SW5kZXggPSBNYXRoLm1pbih0b3RhbCAtIG1heFZpc2libGUsIGN1cnNvciAtIE1hdGguZmxvb3IobWF4VmlzaWJsZSAvIDIpKTtcbiAgaWYgKHN0YXJ0SW5kZXggPCAwKSBzdGFydEluZGV4ID0gMDtcbiAgbGV0IGVuZEluZGV4ID0gTWF0aC5taW4oc3RhcnRJbmRleCArIG1heFZpc2libGUsIHRvdGFsKTtcbiAgcmV0dXJuIHtcbiAgICBzdGFydEluZGV4LFxuICAgIGVuZEluZGV4XG4gIH07XG59OyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFjdGlvbjogcmVxdWlyZSgnLi9hY3Rpb24nKSxcbiAgY2xlYXI6IHJlcXVpcmUoJy4vY2xlYXInKSxcbiAgc3R5bGU6IHJlcXVpcmUoJy4vc3R5bGUnKSxcbiAgc3RyaXA6IHJlcXVpcmUoJy4vc3RyaXAnKSxcbiAgZmlndXJlczogcmVxdWlyZSgnLi9maWd1cmVzJyksXG4gIGxpbmVzOiByZXF1aXJlKCcuL2xpbmVzJyksXG4gIHdyYXA6IHJlcXVpcmUoJy4vd3JhcCcpLFxuICBlbnRyaWVzVG9EaXNwbGF5OiByZXF1aXJlKCcuL2VudHJpZXNUb0Rpc3BsYXknKVxufTsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHJlYWRsaW5lID0gcmVxdWlyZSgncmVhZGxpbmUnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCcuLi91dGlsJyksXG4gICAgICBhY3Rpb24gPSBfcmVxdWlyZS5hY3Rpb247XG5cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpO1xuXG5jb25zdCBfcmVxdWlyZTIgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBiZWVwID0gX3JlcXVpcmUyLmJlZXAsXG4gICAgICBjdXJzb3IgPSBfcmVxdWlyZTIuY3Vyc29yO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG4vKipcbiAqIEJhc2UgcHJvbXB0IHNrZWxldG9uXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqL1xuXG5cbmNsYXNzIFByb21wdCBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5maXJzdFJlbmRlciA9IHRydWU7XG4gICAgdGhpcy5pbiA9IG9wdHMuc3RkaW4gfHwgcHJvY2Vzcy5zdGRpbjtcbiAgICB0aGlzLm91dCA9IG9wdHMuc3Rkb3V0IHx8IHByb2Nlc3Muc3Rkb3V0O1xuXG4gICAgdGhpcy5vblJlbmRlciA9IChvcHRzLm9uUmVuZGVyIHx8ICgoKSA9PiB2b2lkIDApKS5iaW5kKHRoaXMpO1xuXG4gICAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgICAgaW5wdXQ6IHRoaXMuaW4sXG4gICAgICBlc2NhcGVDb2RlVGltZW91dDogNTBcbiAgICB9KTtcbiAgICByZWFkbGluZS5lbWl0S2V5cHJlc3NFdmVudHModGhpcy5pbiwgcmwpO1xuICAgIGlmICh0aGlzLmluLmlzVFRZKSB0aGlzLmluLnNldFJhd01vZGUodHJ1ZSk7XG4gICAgY29uc3QgaXNTZWxlY3QgPSBbJ1NlbGVjdFByb21wdCcsICdNdWx0aXNlbGVjdFByb21wdCddLmluZGV4T2YodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKSA+IC0xO1xuXG4gICAgY29uc3Qga2V5cHJlc3MgPSAoc3RyLCBrZXkpID0+IHtcbiAgICAgIGxldCBhID0gYWN0aW9uKGtleSwgaXNTZWxlY3QpO1xuXG4gICAgICBpZiAoYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fICYmIHRoaXMuXyhzdHIsIGtleSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzW2FdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXNbYV0oa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYmVsbCgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmNsb3NlID0gKCkgPT4ge1xuICAgICAgdGhpcy5vdXQud3JpdGUoY3Vyc29yLnNob3cpO1xuICAgICAgdGhpcy5pbi5yZW1vdmVMaXN0ZW5lcigna2V5cHJlc3MnLCBrZXlwcmVzcyk7XG4gICAgICBpZiAodGhpcy5pbi5pc1RUWSkgdGhpcy5pbi5zZXRSYXdNb2RlKGZhbHNlKTtcbiAgICAgIHJsLmNsb3NlKCk7XG4gICAgICB0aGlzLmVtaXQodGhpcy5hYm9ydGVkID8gJ2Fib3J0JyA6IHRoaXMuZXhpdGVkID8gJ2V4aXQnIDogJ3N1Ym1pdCcsIHRoaXMudmFsdWUpO1xuICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgIH07XG5cbiAgICB0aGlzLmluLm9uKCdrZXlwcmVzcycsIGtleXByZXNzKTtcbiAgfVxuXG4gIGZpcmUoKSB7XG4gICAgdGhpcy5lbWl0KCdzdGF0ZScsIHtcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgYWJvcnRlZDogISF0aGlzLmFib3J0ZWQsXG4gICAgICBleGl0ZWQ6ICEhdGhpcy5leGl0ZWRcbiAgICB9KTtcbiAgfVxuXG4gIGJlbGwoKSB7XG4gICAgdGhpcy5vdXQud3JpdGUoYmVlcCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5vblJlbmRlcihjb2xvcik7XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMuZmlyc3RSZW5kZXIgPSBmYWxzZTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbXB0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7IHRyeSB7IHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTsgdmFyIHZhbHVlID0gaW5mby52YWx1ZTsgfSBjYXRjaCAoZXJyb3IpIHsgcmVqZWN0KGVycm9yKTsgcmV0dXJuOyB9IGlmIChpbmZvLmRvbmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0gZWxzZSB7IFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTsgfSB9XG5cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHZhciBzZWxmID0gdGhpcywgYXJncyA9IGFyZ3VtZW50czsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpOyBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7IH0gZnVuY3Rpb24gX3Rocm93KGVycikgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTsgfSBfbmV4dCh1bmRlZmluZWQpOyB9KTsgfTsgfVxuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5cbmNvbnN0IFByb21wdCA9IHJlcXVpcmUoJy4vcHJvbXB0Jyk7XG5cbmNvbnN0IF9yZXF1aXJlID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpLFxuICAgICAgZXJhc2UgPSBfcmVxdWlyZS5lcmFzZSxcbiAgICAgIGN1cnNvciA9IF9yZXF1aXJlLmN1cnNvcjtcblxuY29uc3QgX3JlcXVpcmUyID0gcmVxdWlyZSgnLi4vdXRpbCcpLFxuICAgICAgc3R5bGUgPSBfcmVxdWlyZTIuc3R5bGUsXG4gICAgICBjbGVhciA9IF9yZXF1aXJlMi5jbGVhcixcbiAgICAgIGxpbmVzID0gX3JlcXVpcmUyLmxpbmVzLFxuICAgICAgZmlndXJlcyA9IF9yZXF1aXJlMi5maWd1cmVzO1xuLyoqXG4gKiBUZXh0UHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuc3R5bGU9J2RlZmF1bHQnXSBSZW5kZXIgc3R5bGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbml0aWFsXSBEZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy52YWxpZGF0ZV0gVmFsaWRhdGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmVycm9yXSBUaGUgaW52YWxpZCBlcnJvciBsYWJlbFxuICovXG5cblxuY2xhc3MgVGV4dFByb21wdCBleHRlbmRzIFByb21wdCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMudHJhbnNmb3JtID0gc3R5bGUucmVuZGVyKG9wdHMuc3R5bGUpO1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmluaXRpYWwgPSBvcHRzLmluaXRpYWwgfHwgYGA7XG5cbiAgICB0aGlzLnZhbGlkYXRvciA9IG9wdHMudmFsaWRhdGUgfHwgKCgpID0+IHRydWUpO1xuXG4gICAgdGhpcy52YWx1ZSA9IGBgO1xuICAgIHRoaXMuZXJyb3JNc2cgPSBvcHRzLmVycm9yIHx8IGBQbGVhc2UgRW50ZXIgQSBWYWxpZCBWYWx1ZWA7XG4gICAgdGhpcy5jdXJzb3IgPSBOdW1iZXIoISF0aGlzLmluaXRpYWwpO1xuICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmNsZWFyID0gY2xlYXIoYGAsIHRoaXMub3V0LmNvbHVtbnMpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgdmFsdWUodikge1xuICAgIGlmICghdiAmJiB0aGlzLmluaXRpYWwpIHtcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSB0cnVlO1xuICAgICAgdGhpcy5yZW5kZXJlZCA9IGNvbG9yLmdyYXkodGhpcy50cmFuc2Zvcm0ucmVuZGVyKHRoaXMuaW5pdGlhbCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gZmFsc2U7XG4gICAgICB0aGlzLnJlbmRlcmVkID0gdGhpcy50cmFuc2Zvcm0ucmVuZGVyKHYpO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICB0aGlzLmZpcmUoKTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5jdXJzb3IgPSBOdW1iZXIoISF0aGlzLmluaXRpYWwpO1xuICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZSB8fCB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICB2YWxpZGF0ZSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBsZXQgdmFsaWQgPSB5aWVsZCBfdGhpcy52YWxpZGF0b3IoX3RoaXMudmFsdWUpO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbGlkID09PSBgc3RyaW5nYCkge1xuICAgICAgICBfdGhpcy5lcnJvck1zZyA9IHZhbGlkO1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5lcnJvciA9ICF2YWxpZDtcbiAgICB9KSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBfdGhpczIudmFsdWUgPSBfdGhpczIudmFsdWUgfHwgX3RoaXMyLmluaXRpYWw7XG4gICAgICBfdGhpczIuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICAgIF90aGlzMi5jdXJzb3IgPSBfdGhpczIucmVuZGVyZWQubGVuZ3RoO1xuICAgICAgeWllbGQgX3RoaXMyLnZhbGlkYXRlKCk7XG5cbiAgICAgIGlmIChfdGhpczIuZXJyb3IpIHtcbiAgICAgICAgX3RoaXMyLnJlZCA9IHRydWU7XG5cbiAgICAgICAgX3RoaXMyLmZpcmUoKTtcblxuICAgICAgICBfdGhpczIucmVuZGVyKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpczIuZG9uZSA9IHRydWU7XG4gICAgICBfdGhpczIuYWJvcnRlZCA9IGZhbHNlO1xuXG4gICAgICBfdGhpczIuZmlyZSgpO1xuXG4gICAgICBfdGhpczIucmVuZGVyKCk7XG5cbiAgICAgIF90aGlzMi5vdXQud3JpdGUoJ1xcbicpO1xuXG4gICAgICBfdGhpczIuY2xvc2UoKTtcbiAgICB9KSgpO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICBpZiAoIXRoaXMucGxhY2Vob2xkZXIpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5pbml0aWFsO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5yZW5kZXJlZC5sZW5ndGg7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKSByZXR1cm47XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmN1cnNvciArIG47XG4gICAgdGhpcy5jdXJzb3JPZmZzZXQgKz0gbjtcbiAgfVxuXG4gIF8oYywga2V5KSB7XG4gICAgbGV0IHMxID0gdGhpcy52YWx1ZS5zbGljZSgwLCB0aGlzLmN1cnNvcik7XG4gICAgbGV0IHMyID0gdGhpcy52YWx1ZS5zbGljZSh0aGlzLmN1cnNvcik7XG4gICAgdGhpcy52YWx1ZSA9IGAke3MxfSR7Y30ke3MyfWA7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMucGxhY2Vob2xkZXIgPyAwIDogczEubGVuZ3RoICsgMTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlKCkge1xuICAgIGlmICh0aGlzLmlzQ3Vyc29yQXRTdGFydCgpKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgbGV0IHMxID0gdGhpcy52YWx1ZS5zbGljZSgwLCB0aGlzLmN1cnNvciAtIDEpO1xuICAgIGxldCBzMiA9IHRoaXMudmFsdWUuc2xpY2UodGhpcy5jdXJzb3IpO1xuICAgIHRoaXMudmFsdWUgPSBgJHtzMX0ke3MyfWA7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmlzQ3Vyc29yQXRTdGFydCgpKSB7XG4gICAgICB0aGlzLmN1cnNvck9mZnNldCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3Vyc29yT2Zmc2V0Kys7XG4gICAgICB0aGlzLm1vdmVDdXJzb3IoLTEpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGVGb3J3YXJkKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciAqIHRoaXMuc2NhbGUgPj0gdGhpcy5yZW5kZXJlZC5sZW5ndGggfHwgdGhpcy5wbGFjZWhvbGRlcikgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIGxldCBzMSA9IHRoaXMudmFsdWUuc2xpY2UoMCwgdGhpcy5jdXJzb3IpO1xuICAgIGxldCBzMiA9IHRoaXMudmFsdWUuc2xpY2UodGhpcy5jdXJzb3IgKyAxKTtcbiAgICB0aGlzLnZhbHVlID0gYCR7czF9JHtzMn1gO1xuICAgIHRoaXMucmVkID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5pc0N1cnNvckF0RW5kKCkpIHtcbiAgICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJzb3JPZmZzZXQrKztcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZmlyc3QoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsYXN0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy52YWx1ZS5sZW5ndGg7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxlZnQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yIDw9IDAgfHwgdGhpcy5wbGFjZWhvbGRlcikgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcigtMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJpZ2h0KCkge1xuICAgIGlmICh0aGlzLmN1cnNvciAqIHRoaXMuc2NhbGUgPj0gdGhpcy5yZW5kZXJlZC5sZW5ndGggfHwgdGhpcy5wbGFjZWhvbGRlcikgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcigxKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgaXNDdXJzb3JBdFN0YXJ0KCkge1xuICAgIHJldHVybiB0aGlzLmN1cnNvciA9PT0gMCB8fCB0aGlzLnBsYWNlaG9sZGVyICYmIHRoaXMuY3Vyc29yID09PSAxO1xuICB9XG5cbiAgaXNDdXJzb3JBdEVuZCgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJzb3IgPT09IHRoaXMucmVuZGVyZWQubGVuZ3RoIHx8IHRoaXMucGxhY2Vob2xkZXIgJiYgdGhpcy5jdXJzb3IgPT09IHRoaXMucmVuZGVyZWQubGVuZ3RoICsgMTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcblxuICAgIGlmICghdGhpcy5maXJzdFJlbmRlcikge1xuICAgICAgaWYgKHRoaXMub3V0cHV0RXJyb3IpIHRoaXMub3V0LndyaXRlKGN1cnNvci5kb3duKGxpbmVzKHRoaXMub3V0cHV0RXJyb3IsIHRoaXMub3V0LmNvbHVtbnMpIC0gMSkgKyBjbGVhcih0aGlzLm91dHB1dEVycm9yLCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgICB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICB9XG5cbiAgICBzdXBlci5yZW5kZXIoKTtcbiAgICB0aGlzLm91dHB1dEVycm9yID0gJyc7XG4gICAgdGhpcy5vdXRwdXRUZXh0ID0gW3N0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksIGNvbG9yLmJvbGQodGhpcy5tc2cpLCBzdHlsZS5kZWxpbWl0ZXIodGhpcy5kb25lKSwgdGhpcy5yZWQgPyBjb2xvci5yZWQodGhpcy5yZW5kZXJlZCkgOiB0aGlzLnJlbmRlcmVkXS5qb2luKGAgYCk7XG5cbiAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgdGhpcy5vdXRwdXRFcnJvciArPSB0aGlzLmVycm9yTXNnLnNwbGl0KGBcXG5gKS5yZWR1Y2UoKGEsIGwsIGkpID0+IGEgKyBgXFxuJHtpID8gJyAnIDogZmlndXJlcy5wb2ludGVyU21hbGx9ICR7Y29sb3IucmVkKCkuaXRhbGljKGwpfWAsIGBgKTtcbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZShlcmFzZS5saW5lICsgY3Vyc29yLnRvKDApICsgdGhpcy5vdXRwdXRUZXh0ICsgY3Vyc29yLnNhdmUgKyB0aGlzLm91dHB1dEVycm9yICsgY3Vyc29yLnJlc3RvcmUgKyBjdXJzb3IubW92ZSh0aGlzLmN1cnNvck9mZnNldCwgMCkpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0UHJvbXB0OyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuXG5jb25zdCBQcm9tcHQgPSByZXF1aXJlKCcuL3Byb21wdCcpO1xuXG5jb25zdCBfcmVxdWlyZSA9IHJlcXVpcmUoJy4uL3V0aWwnKSxcbiAgICAgIHN0eWxlID0gX3JlcXVpcmUuc3R5bGUsXG4gICAgICBjbGVhciA9IF9yZXF1aXJlLmNsZWFyLFxuICAgICAgZmlndXJlcyA9IF9yZXF1aXJlLmZpZ3VyZXMsXG4gICAgICB3cmFwID0gX3JlcXVpcmUud3JhcCxcbiAgICAgIGVudHJpZXNUb0Rpc3BsYXkgPSBfcmVxdWlyZS5lbnRyaWVzVG9EaXNwbGF5O1xuXG5jb25zdCBfcmVxdWlyZTIgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBjdXJzb3IgPSBfcmVxdWlyZTIuY3Vyc29yO1xuLyoqXG4gKiBTZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmluaXRpYWxdIEluZGV4IG9mIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm9wdGlvbnNQZXJQYWdlPTEwXSBNYXggb3B0aW9ucyB0byBkaXNwbGF5IGF0IG9uY2VcbiAqL1xuXG5cbmNsYXNzIFNlbGVjdFByb21wdCBleHRlbmRzIFByb21wdCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMubXNnID0gb3B0cy5tZXNzYWdlO1xuICAgIHRoaXMuaGludCA9IG9wdHMuaGludCB8fCAnLSBVc2UgYXJyb3cta2V5cy4gUmV0dXJuIHRvIHN1Ym1pdC4nO1xuICAgIHRoaXMud2FybiA9IG9wdHMud2FybiB8fCAnLSBUaGlzIG9wdGlvbiBpcyBkaXNhYmxlZCc7XG4gICAgdGhpcy5jdXJzb3IgPSBvcHRzLmluaXRpYWwgfHwgMDtcbiAgICB0aGlzLmNob2ljZXMgPSBvcHRzLmNob2ljZXMubWFwKChjaCwgaWR4KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNoID09PSAnc3RyaW5nJykgY2ggPSB7XG4gICAgICAgIHRpdGxlOiBjaCxcbiAgICAgICAgdmFsdWU6IGlkeFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBjaCAmJiAoY2gudGl0bGUgfHwgY2gudmFsdWUgfHwgY2gpLFxuICAgICAgICB2YWx1ZTogY2ggJiYgKGNoLnZhbHVlID09PSB1bmRlZmluZWQgPyBpZHggOiBjaC52YWx1ZSksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBjaCAmJiBjaC5kZXNjcmlwdGlvbixcbiAgICAgICAgc2VsZWN0ZWQ6IGNoICYmIGNoLnNlbGVjdGVkLFxuICAgICAgICBkaXNhYmxlZDogY2ggJiYgY2guZGlzYWJsZWRcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5vcHRpb25zUGVyUGFnZSA9IG9wdHMub3B0aW9uc1BlclBhZ2UgfHwgMTA7XG4gICAgdGhpcy52YWx1ZSA9ICh0aGlzLmNob2ljZXNbdGhpcy5jdXJzb3JdIHx8IHt9KS52YWx1ZTtcbiAgICB0aGlzLmNsZWFyID0gY2xlYXIoJycsIHRoaXMub3V0LmNvbHVtbnMpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBtb3ZlQ3Vyc29yKG4pIHtcbiAgICB0aGlzLmN1cnNvciA9IG47XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuY2hvaWNlc1tuXS52YWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMubW92ZUN1cnNvcigwKTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfSBlbHNlIHRoaXMuYmVsbCgpO1xuICB9XG5cbiAgZmlyc3QoKSB7XG4gICAgdGhpcy5tb3ZlQ3Vyc29yKDApO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsYXN0KCkge1xuICAgIHRoaXMubW92ZUN1cnNvcih0aGlzLmNob2ljZXMubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gMCkge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY2hvaWNlcy5sZW5ndGggLSAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY3Vyc29yIC0gMSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSB0aGlzLmNob2ljZXMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5jdXJzb3IgKyAxKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICB0aGlzLm1vdmVDdXJzb3IoKHRoaXMuY3Vyc29yICsgMSkgJSB0aGlzLmNob2ljZXMubGVuZ3RoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYyA9PT0gJyAnKSByZXR1cm4gdGhpcy5zdWJtaXQoKTtcbiAgfVxuXG4gIGdldCBzZWxlY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hvaWNlc1t0aGlzLmN1cnNvcl07XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtlbHNlIHRoaXMub3V0LndyaXRlKGNsZWFyKHRoaXMub3V0cHV0VGV4dCwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgIHN1cGVyLnJlbmRlcigpO1xuXG4gICAgbGV0IF9lbnRyaWVzVG9EaXNwbGF5ID0gZW50cmllc1RvRGlzcGxheSh0aGlzLmN1cnNvciwgdGhpcy5jaG9pY2VzLmxlbmd0aCwgdGhpcy5vcHRpb25zUGVyUGFnZSksXG4gICAgICAgIHN0YXJ0SW5kZXggPSBfZW50cmllc1RvRGlzcGxheS5zdGFydEluZGV4LFxuICAgICAgICBlbmRJbmRleCA9IF9lbnRyaWVzVG9EaXNwbGF5LmVuZEluZGV4OyAvLyBQcmludCBwcm9tcHRcblxuXG4gICAgdGhpcy5vdXRwdXRUZXh0ID0gW3N0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksIGNvbG9yLmJvbGQodGhpcy5tc2cpLCBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLCB0aGlzLmRvbmUgPyB0aGlzLnNlbGVjdGlvbi50aXRsZSA6IHRoaXMuc2VsZWN0aW9uLmRpc2FibGVkID8gY29sb3IueWVsbG93KHRoaXMud2FybikgOiBjb2xvci5ncmF5KHRoaXMuaGludCldLmpvaW4oJyAnKTsgLy8gUHJpbnQgY2hvaWNlc1xuXG4gICAgaWYgKCF0aGlzLmRvbmUpIHtcbiAgICAgIHRoaXMub3V0cHV0VGV4dCArPSAnXFxuJztcblxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmRJbmRleDsgaSsrKSB7XG4gICAgICAgIGxldCB0aXRsZSxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIGRlc2MgPSAnJyxcbiAgICAgICAgICAgIHYgPSB0aGlzLmNob2ljZXNbaV07IC8vIERldGVybWluZSB3aGV0aGVyIHRvIGRpc3BsYXkgXCJtb3JlIGNob2ljZXNcIiBpbmRpY2F0b3JzXG5cbiAgICAgICAgaWYgKGkgPT09IHN0YXJ0SW5kZXggJiYgc3RhcnRJbmRleCA+IDApIHtcbiAgICAgICAgICBwcmVmaXggPSBmaWd1cmVzLmFycm93VXA7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgdGhpcy5jaG9pY2VzLmxlbmd0aCkge1xuICAgICAgICAgIHByZWZpeCA9IGZpZ3VyZXMuYXJyb3dEb3duO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZWZpeCA9ICcgJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2LmRpc2FibGVkKSB7XG4gICAgICAgICAgdGl0bGUgPSB0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmdyYXkoKS51bmRlcmxpbmUodi50aXRsZSkgOiBjb2xvci5zdHJpa2V0aHJvdWdoKCkuZ3JheSh2LnRpdGxlKTtcbiAgICAgICAgICBwcmVmaXggPSAodGhpcy5jdXJzb3IgPT09IGkgPyBjb2xvci5ib2xkKCkuZ3JheShmaWd1cmVzLnBvaW50ZXIpICsgJyAnIDogJyAgJykgKyBwcmVmaXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGl0bGUgPSB0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodi50aXRsZSkgOiB2LnRpdGxlO1xuICAgICAgICAgIHByZWZpeCA9ICh0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmN5YW4oZmlndXJlcy5wb2ludGVyKSArICcgJyA6ICcgICcpICsgcHJlZml4O1xuXG4gICAgICAgICAgaWYgKHYuZGVzY3JpcHRpb24gJiYgdGhpcy5jdXJzb3IgPT09IGkpIHtcbiAgICAgICAgICAgIGRlc2MgPSBgIC0gJHt2LmRlc2NyaXB0aW9ufWA7XG5cbiAgICAgICAgICAgIGlmIChwcmVmaXgubGVuZ3RoICsgdGl0bGUubGVuZ3RoICsgZGVzYy5sZW5ndGggPj0gdGhpcy5vdXQuY29sdW1ucyB8fCB2LmRlc2NyaXB0aW9uLnNwbGl0KC9cXHI/XFxuLykubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICBkZXNjID0gJ1xcbicgKyB3cmFwKHYuZGVzY3JpcHRpb24sIHtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDMsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMub3V0LmNvbHVtbnNcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9IGAke3ByZWZpeH0gJHt0aXRsZX0ke2NvbG9yLmdyYXkoZGVzYyl9XFxuYDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZSh0aGlzLm91dHB1dFRleHQpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTZWxlY3RQcm9tcHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcblxuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCcuLi91dGlsJyksXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlLnN0eWxlLFxuICAgICAgY2xlYXIgPSBfcmVxdWlyZS5jbGVhcjtcblxuY29uc3QgX3JlcXVpcmUyID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUyLmN1cnNvcixcbiAgICAgIGVyYXNlID0gX3JlcXVpcmUyLmVyYXNlO1xuLyoqXG4gKiBUb2dnbGVQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuaW5pdGlhbD1mYWxzZV0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmFjdGl2ZT0nbm8nXSBBY3RpdmUgbGFiZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbmFjdGl2ZT0nb2ZmJ10gSW5hY3RpdmUgbGFiZWxcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5cblxuY2xhc3MgVG9nZ2xlUHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy52YWx1ZSA9ICEhb3B0cy5pbml0aWFsO1xuICAgIHRoaXMuYWN0aXZlID0gb3B0cy5hY3RpdmUgfHwgJ29uJztcbiAgICB0aGlzLmluYWN0aXZlID0gb3B0cy5pbmFjdGl2ZSB8fCAnb2ZmJztcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLmluaXRpYWxWYWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgaWYgKHRoaXMudmFsdWUgPT09IGZhbHNlKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBhY3RpdmF0ZSgpIHtcbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gdHJ1ZSkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIHRoaXMuZGVhY3RpdmF0ZSgpO1xuICB9XG5cbiAgcmlnaHQoKSB7XG4gICAgdGhpcy5hY3RpdmF0ZSgpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuYWN0aXZhdGUoKTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgdGhpcy52YWx1ZSA9ICF0aGlzLnZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBfKGMsIGtleSkge1xuICAgIGlmIChjID09PSAnICcpIHtcbiAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZTtcbiAgICB9IGVsc2UgaWYgKGMgPT09ICcxJykge1xuICAgICAgdGhpcy52YWx1ZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChjID09PSAnMCcpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBmYWxzZTtcbiAgICB9IGVsc2UgcmV0dXJuIHRoaXMuYmVsbCgpO1xuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5maXJzdFJlbmRlcikgdGhpcy5vdXQud3JpdGUoY3Vyc29yLmhpZGUpO2Vsc2UgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG4gICAgdGhpcy5vdXRwdXRUZXh0ID0gW3N0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksIGNvbG9yLmJvbGQodGhpcy5tc2cpLCBzdHlsZS5kZWxpbWl0ZXIodGhpcy5kb25lKSwgdGhpcy52YWx1ZSA/IHRoaXMuaW5hY3RpdmUgOiBjb2xvci5jeWFuKCkudW5kZXJsaW5lKHRoaXMuaW5hY3RpdmUpLCBjb2xvci5ncmF5KCcvJyksIHRoaXMudmFsdWUgPyBjb2xvci5jeWFuKCkudW5kZXJsaW5lKHRoaXMuYWN0aXZlKSA6IHRoaXMuYWN0aXZlXS5qb2luKCcgJyk7XG4gICAgdGhpcy5vdXQud3JpdGUoZXJhc2UubGluZSArIGN1cnNvci50bygwKSArIHRoaXMub3V0cHV0VGV4dCk7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvZ2dsZVByb21wdDsiLCIndXNlIHN0cmljdCc7XG5cbmNsYXNzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIHRva2VuLFxuICAgIGRhdGUsXG4gICAgcGFydHMsXG4gICAgbG9jYWxlc1xuICB9KSB7XG4gICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIHRoaXMuZGF0ZSA9IGRhdGUgfHwgbmV3IERhdGUoKTtcbiAgICB0aGlzLnBhcnRzID0gcGFydHMgfHwgW3RoaXNdO1xuICAgIHRoaXMubG9jYWxlcyA9IGxvY2FsZXMgfHwge307XG4gIH1cblxuICB1cCgpIHt9XG5cbiAgZG93bigpIHt9XG5cbiAgbmV4dCgpIHtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gdGhpcy5wYXJ0cy5pbmRleE9mKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnBhcnRzLmZpbmQoKHBhcnQsIGlkeCkgPT4gaWR4ID4gY3VycmVudElkeCAmJiBwYXJ0IGluc3RhbmNlb2YgRGF0ZVBhcnQpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7fVxuXG4gIHByZXYoKSB7XG4gICAgbGV0IHBhcnRzID0gW10uY29uY2F0KHRoaXMucGFydHMpLnJldmVyc2UoKTtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gcGFydHMuaW5kZXhPZih0aGlzKTtcbiAgICByZXR1cm4gcGFydHMuZmluZCgocGFydCwgaWR4KSA9PiBpZHggPiBjdXJyZW50SWR4ICYmIHBhcnQgaW5zdGFuY2VvZiBEYXRlUGFydCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuZGF0ZSk7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGVQYXJ0OyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgRGF0ZVBhcnQgPSByZXF1aXJlKCcuL2RhdGVwYXJ0Jyk7XG5cbmNsYXNzIE1lcmlkaWVtIGV4dGVuZHMgRGF0ZVBhcnQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRIb3VycygodGhpcy5kYXRlLmdldEhvdXJzKCkgKyAxMikgJSAyNCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMudXAoKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBtZXJpZGllbSA9IHRoaXMuZGF0ZS5nZXRIb3VycygpID4gMTIgPyAncG0nIDogJ2FtJztcbiAgICByZXR1cm4gL1xcQS8udGVzdCh0aGlzLnRva2VuKSA/IG1lcmlkaWVtLnRvVXBwZXJDYXNlKCkgOiBtZXJpZGllbTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWVyaWRpZW07IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY29uc3QgcG9zID0gbiA9PiB7XG4gIG4gPSBuICUgMTA7XG4gIHJldHVybiBuID09PSAxID8gJ3N0JyA6IG4gPT09IDIgPyAnbmQnIDogbiA9PT0gMyA/ICdyZCcgOiAndGgnO1xufTtcblxuY2xhc3MgRGF5IGV4dGVuZHMgRGF0ZVBhcnQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXREYXRlKHRoaXMuZGF0ZS5nZXREYXRlKCkgKyAxKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgdGhpcy5kYXRlLnNldERhdGUodGhpcy5kYXRlLmdldERhdGUoKSAtIDEpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7XG4gICAgdGhpcy5kYXRlLnNldERhdGUocGFyc2VJbnQodmFsLnN1YnN0cigtMikpKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBkYXRlID0gdGhpcy5kYXRlLmdldERhdGUoKTtcbiAgICBsZXQgZGF5ID0gdGhpcy5kYXRlLmdldERheSgpO1xuICAgIHJldHVybiB0aGlzLnRva2VuID09PSAnREQnID8gU3RyaW5nKGRhdGUpLnBhZFN0YXJ0KDIsICcwJykgOiB0aGlzLnRva2VuID09PSAnRG8nID8gZGF0ZSArIHBvcyhkYXRlKSA6IHRoaXMudG9rZW4gPT09ICdkJyA/IGRheSArIDEgOiB0aGlzLnRva2VuID09PSAnZGRkJyA/IHRoaXMubG9jYWxlcy53ZWVrZGF5c1Nob3J0W2RheV0gOiB0aGlzLnRva2VuID09PSAnZGRkZCcgPyB0aGlzLmxvY2FsZXMud2Vla2RheXNbZGF5XSA6IGRhdGU7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERheTsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jbGFzcyBIb3VycyBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gIH1cblxuICB1cCgpIHtcbiAgICB0aGlzLmRhdGUuc2V0SG91cnModGhpcy5kYXRlLmdldEhvdXJzKCkgKyAxKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgdGhpcy5kYXRlLnNldEhvdXJzKHRoaXMuZGF0ZS5nZXRIb3VycygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0SG91cnMocGFyc2VJbnQodmFsLnN1YnN0cigtMikpKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBob3VycyA9IHRoaXMuZGF0ZS5nZXRIb3VycygpO1xuICAgIGlmICgvaC8udGVzdCh0aGlzLnRva2VuKSkgaG91cnMgPSBob3VycyAlIDEyIHx8IDEyO1xuICAgIHJldHVybiB0aGlzLnRva2VuLmxlbmd0aCA+IDEgPyBTdHJpbmcoaG91cnMpLnBhZFN0YXJ0KDIsICcwJykgOiBob3VycztcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gSG91cnM7IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgTWlsbGlzZWNvbmRzIGV4dGVuZHMgRGF0ZVBhcnQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlLmdldE1pbGxpc2Vjb25kcygpICsgMSk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlLmdldE1pbGxpc2Vjb25kcygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWlsbGlzZWNvbmRzKHBhcnNlSW50KHZhbC5zdWJzdHIoLXRoaXMudG9rZW4ubGVuZ3RoKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIFN0cmluZyh0aGlzLmRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpLnBhZFN0YXJ0KDQsICcwJykuc3Vic3RyKDAsIHRoaXMudG9rZW4ubGVuZ3RoKTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWlsbGlzZWNvbmRzOyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgRGF0ZVBhcnQgPSByZXF1aXJlKCcuL2RhdGVwYXJ0Jyk7XG5cbmNsYXNzIE1pbnV0ZXMgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldE1pbnV0ZXModGhpcy5kYXRlLmdldE1pbnV0ZXMoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWludXRlcyh0aGlzLmRhdGUuZ2V0TWludXRlcygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWludXRlcyhwYXJzZUludCh2YWwuc3Vic3RyKC0yKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IG0gPSB0aGlzLmRhdGUuZ2V0TWludXRlcygpO1xuICAgIHJldHVybiB0aGlzLnRva2VuLmxlbmd0aCA+IDEgPyBTdHJpbmcobSkucGFkU3RhcnQoMiwgJzAnKSA6IG07XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1pbnV0ZXM7IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgTW9udGggZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldE1vbnRoKHRoaXMuZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNb250aCh0aGlzLmRhdGUuZ2V0TW9udGgoKSAtIDEpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7XG4gICAgdmFsID0gcGFyc2VJbnQodmFsLnN1YnN0cigtMikpIC0gMTtcbiAgICB0aGlzLmRhdGUuc2V0TW9udGgodmFsIDwgMCA/IDAgOiB2YWwpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IG1vbnRoID0gdGhpcy5kYXRlLmdldE1vbnRoKCk7XG4gICAgbGV0IHRsID0gdGhpcy50b2tlbi5sZW5ndGg7XG4gICAgcmV0dXJuIHRsID09PSAyID8gU3RyaW5nKG1vbnRoICsgMSkucGFkU3RhcnQoMiwgJzAnKSA6IHRsID09PSAzID8gdGhpcy5sb2NhbGVzLm1vbnRoc1Nob3J0W21vbnRoXSA6IHRsID09PSA0ID8gdGhpcy5sb2NhbGVzLm1vbnRoc1ttb250aF0gOiBTdHJpbmcobW9udGggKyAxKTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9udGg7IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgU2Vjb25kcyBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gIH1cblxuICB1cCgpIHtcbiAgICB0aGlzLmRhdGUuc2V0U2Vjb25kcyh0aGlzLmRhdGUuZ2V0U2Vjb25kcygpICsgMSk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRTZWNvbmRzKHRoaXMuZGF0ZS5nZXRTZWNvbmRzKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHRoaXMuZGF0ZS5zZXRTZWNvbmRzKHBhcnNlSW50KHZhbC5zdWJzdHIoLTIpKSk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICBsZXQgcyA9IHRoaXMuZGF0ZS5nZXRTZWNvbmRzKCk7XG4gICAgcmV0dXJuIHRoaXMudG9rZW4ubGVuZ3RoID4gMSA/IFN0cmluZyhzKS5wYWRTdGFydCgyLCAnMCcpIDogcztcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2Vjb25kczsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jbGFzcyBZZWFyIGV4dGVuZHMgRGF0ZVBhcnQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRGdWxsWWVhcih0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0RnVsbFllYXIodGhpcy5kYXRlLmdldEZ1bGxZZWFyKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHRoaXMuZGF0ZS5zZXRGdWxsWWVhcih2YWwuc3Vic3RyKC00KSk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICBsZXQgeWVhciA9IFN0cmluZyh0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSkucGFkU3RhcnQoNCwgJzAnKTtcbiAgICByZXR1cm4gdGhpcy50b2tlbi5sZW5ndGggPT09IDIgPyB5ZWFyLnN1YnN0cigtMikgOiB5ZWFyO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBZZWFyOyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIERhdGVQYXJ0OiByZXF1aXJlKCcuL2RhdGVwYXJ0JyksXG4gIE1lcmlkaWVtOiByZXF1aXJlKCcuL21lcmlkaWVtJyksXG4gIERheTogcmVxdWlyZSgnLi9kYXknKSxcbiAgSG91cnM6IHJlcXVpcmUoJy4vaG91cnMnKSxcbiAgTWlsbGlzZWNvbmRzOiByZXF1aXJlKCcuL21pbGxpc2Vjb25kcycpLFxuICBNaW51dGVzOiByZXF1aXJlKCcuL21pbnV0ZXMnKSxcbiAgTW9udGg6IHJlcXVpcmUoJy4vbW9udGgnKSxcbiAgU2Vjb25kczogcmVxdWlyZSgnLi9zZWNvbmRzJyksXG4gIFllYXI6IHJlcXVpcmUoJy4veWVhcicpXG59OyIsIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykgeyB0cnkgeyB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7IHZhciB2YWx1ZSA9IGluZm8udmFsdWU7IH0gY2F0Y2ggKGVycm9yKSB7IHJlamVjdChlcnJvcik7IHJldHVybjsgfSBpZiAoaW5mby5kb25lKSB7IHJlc29sdmUodmFsdWUpOyB9IGVsc2UgeyBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7IH0gfVxuXG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyB2YXIgc2VsZiA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTsgZnVuY3Rpb24gX25leHQodmFsdWUpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpOyB9IGZ1bmN0aW9uIF90aHJvdyhlcnIpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7IH0gX25leHQodW5kZWZpbmVkKTsgfSk7IH07IH1cblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuXG5jb25zdCBQcm9tcHQgPSByZXF1aXJlKCcuL3Byb21wdCcpO1xuXG5jb25zdCBfcmVxdWlyZSA9IHJlcXVpcmUoJy4uL3V0aWwnKSxcbiAgICAgIHN0eWxlID0gX3JlcXVpcmUuc3R5bGUsXG4gICAgICBjbGVhciA9IF9yZXF1aXJlLmNsZWFyLFxuICAgICAgZmlndXJlcyA9IF9yZXF1aXJlLmZpZ3VyZXM7XG5cbmNvbnN0IF9yZXF1aXJlMiA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKSxcbiAgICAgIGVyYXNlID0gX3JlcXVpcmUyLmVyYXNlLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUyLmN1cnNvcjtcblxuY29uc3QgX3JlcXVpcmUzID0gcmVxdWlyZSgnLi4vZGF0ZXBhcnRzJyksXG4gICAgICBEYXRlUGFydCA9IF9yZXF1aXJlMy5EYXRlUGFydCxcbiAgICAgIE1lcmlkaWVtID0gX3JlcXVpcmUzLk1lcmlkaWVtLFxuICAgICAgRGF5ID0gX3JlcXVpcmUzLkRheSxcbiAgICAgIEhvdXJzID0gX3JlcXVpcmUzLkhvdXJzLFxuICAgICAgTWlsbGlzZWNvbmRzID0gX3JlcXVpcmUzLk1pbGxpc2Vjb25kcyxcbiAgICAgIE1pbnV0ZXMgPSBfcmVxdWlyZTMuTWludXRlcyxcbiAgICAgIE1vbnRoID0gX3JlcXVpcmUzLk1vbnRoLFxuICAgICAgU2Vjb25kcyA9IF9yZXF1aXJlMy5TZWNvbmRzLFxuICAgICAgWWVhciA9IF9yZXF1aXJlMy5ZZWFyO1xuXG5jb25zdCByZWdleCA9IC9cXFxcKC4pfFwiKCg/OlxcXFxbXCJcXFxcXXxbXlwiXSkrKVwifChEW0RvXT98ZHszLDR9fGQpfChNezEsNH0pfChZWSg/OllZKT8pfChbYUFdKXwoW0hoXXsxLDJ9KXwobXsxLDJ9KXwoc3sxLDJ9KXwoU3sxLDR9KXwuL2c7XG5jb25zdCByZWdleEdyb3VwcyA9IHtcbiAgMTogKHtcbiAgICB0b2tlblxuICB9KSA9PiB0b2tlbi5yZXBsYWNlKC9cXFxcKC4pL2csICckMScpLFxuICAyOiBvcHRzID0+IG5ldyBEYXkob3B0cyksXG4gIC8vIERheSAvLyBUT0RPXG4gIDM6IG9wdHMgPT4gbmV3IE1vbnRoKG9wdHMpLFxuICAvLyBNb250aFxuICA0OiBvcHRzID0+IG5ldyBZZWFyKG9wdHMpLFxuICAvLyBZZWFyXG4gIDU6IG9wdHMgPT4gbmV3IE1lcmlkaWVtKG9wdHMpLFxuICAvLyBBTS9QTSAvLyBUT0RPIChzcGVjaWFsKVxuICA2OiBvcHRzID0+IG5ldyBIb3VycyhvcHRzKSxcbiAgLy8gSG91cnNcbiAgNzogb3B0cyA9PiBuZXcgTWludXRlcyhvcHRzKSxcbiAgLy8gTWludXRlc1xuICA4OiBvcHRzID0+IG5ldyBTZWNvbmRzKG9wdHMpLFxuICAvLyBTZWNvbmRzXG4gIDk6IG9wdHMgPT4gbmV3IE1pbGxpc2Vjb25kcyhvcHRzKSAvLyBGcmFjdGlvbmFsIHNlY29uZHNcblxufTtcbmNvbnN0IGRmbHRMb2NhbGVzID0ge1xuICBtb250aHM6ICdKYW51YXJ5LEZlYnJ1YXJ5LE1hcmNoLEFwcmlsLE1heSxKdW5lLEp1bHksQXVndXN0LFNlcHRlbWJlcixPY3RvYmVyLE5vdmVtYmVyLERlY2VtYmVyJy5zcGxpdCgnLCcpLFxuICBtb250aHNTaG9ydDogJ0phbixGZWIsTWFyLEFwcixNYXksSnVuLEp1bCxBdWcsU2VwLE9jdCxOb3YsRGVjJy5zcGxpdCgnLCcpLFxuICB3ZWVrZGF5czogJ1N1bmRheSxNb25kYXksVHVlc2RheSxXZWRuZXNkYXksVGh1cnNkYXksRnJpZGF5LFNhdHVyZGF5Jy5zcGxpdCgnLCcpLFxuICB3ZWVrZGF5c1Nob3J0OiAnU3VuLE1vbixUdWUsV2VkLFRodSxGcmksU2F0Jy5zcGxpdCgnLCcpXG59O1xuLyoqXG4gKiBEYXRlUHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5pdGlhbF0gSW5kZXggb2YgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm1hc2tdIFRoZSBmb3JtYXQgbWFza1xuICogQHBhcmFtIHtvYmplY3R9IFtvcHRzLmxvY2FsZXNdIFRoZSBkYXRlIGxvY2FsZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5lcnJvcl0gVGhlIGVycm9yIG1lc3NhZ2Ugc2hvd24gb24gaW52YWxpZCB2YWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBzdWJtaXR0ZWQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5cbmNsYXNzIERhdGVQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmN1cnNvciA9IDA7XG4gICAgdGhpcy50eXBlZCA9ICcnO1xuICAgIHRoaXMubG9jYWxlcyA9IE9iamVjdC5hc3NpZ24oZGZsdExvY2FsZXMsIG9wdHMubG9jYWxlcyk7XG4gICAgdGhpcy5fZGF0ZSA9IG9wdHMuaW5pdGlhbCB8fCBuZXcgRGF0ZSgpO1xuICAgIHRoaXMuZXJyb3JNc2cgPSBvcHRzLmVycm9yIHx8ICdQbGVhc2UgRW50ZXIgQSBWYWxpZCBWYWx1ZSc7XG5cbiAgICB0aGlzLnZhbGlkYXRvciA9IG9wdHMudmFsaWRhdGUgfHwgKCgpID0+IHRydWUpO1xuXG4gICAgdGhpcy5tYXNrID0gb3B0cy5tYXNrIHx8ICdZWVlZLU1NLUREIEhIOm1tOnNzJztcbiAgICB0aGlzLmNsZWFyID0gY2xlYXIoJycsIHRoaXMub3V0LmNvbHVtbnMpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZTtcbiAgfVxuXG4gIGdldCBkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRlO1xuICB9XG5cbiAgc2V0IGRhdGUoZGF0ZSkge1xuICAgIGlmIChkYXRlKSB0aGlzLl9kYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkpO1xuICB9XG5cbiAgc2V0IG1hc2sobWFzaykge1xuICAgIGxldCByZXN1bHQ7XG4gICAgdGhpcy5wYXJ0cyA9IFtdO1xuXG4gICAgd2hpbGUgKHJlc3VsdCA9IHJlZ2V4LmV4ZWMobWFzaykpIHtcbiAgICAgIGxldCBtYXRjaCA9IHJlc3VsdC5zaGlmdCgpO1xuICAgICAgbGV0IGlkeCA9IHJlc3VsdC5maW5kSW5kZXgoZ3IgPT4gZ3IgIT0gbnVsbCk7XG4gICAgICB0aGlzLnBhcnRzLnB1c2goaWR4IGluIHJlZ2V4R3JvdXBzID8gcmVnZXhHcm91cHNbaWR4XSh7XG4gICAgICAgIHRva2VuOiByZXN1bHRbaWR4XSB8fCBtYXRjaCxcbiAgICAgICAgZGF0ZTogdGhpcy5kYXRlLFxuICAgICAgICBwYXJ0czogdGhpcy5wYXJ0cyxcbiAgICAgICAgbG9jYWxlczogdGhpcy5sb2NhbGVzXG4gICAgICB9KSA6IHJlc3VsdFtpZHhdIHx8IG1hdGNoKTtcbiAgICB9XG5cbiAgICBsZXQgcGFydHMgPSB0aGlzLnBhcnRzLnJlZHVjZSgoYXJyLCBpKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGkgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBhcnJbYXJyLmxlbmd0aCAtIDFdID09PSAnc3RyaW5nJykgYXJyW2Fyci5sZW5ndGggLSAxXSArPSBpO2Vsc2UgYXJyLnB1c2goaSk7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH0sIFtdKTtcbiAgICB0aGlzLnBhcnRzLnNwbGljZSgwKTtcbiAgICB0aGlzLnBhcnRzLnB1c2goLi4ucGFydHMpO1xuICAgIHRoaXMucmVzZXQoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIHRoaXMudHlwZWQgPSAnJztcbiAgICB0aGlzLmN1cnNvciA9IG47XG4gICAgdGhpcy5maXJlKCk7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5wYXJ0cy5maW5kSW5kZXgocCA9PiBwIGluc3RhbmNlb2YgRGF0ZVBhcnQpKTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICB2YWxpZGF0ZSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBsZXQgdmFsaWQgPSB5aWVsZCBfdGhpcy52YWxpZGF0b3IoX3RoaXMudmFsdWUpO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbGlkID09PSAnc3RyaW5nJykge1xuICAgICAgICBfdGhpcy5lcnJvck1zZyA9IHZhbGlkO1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5lcnJvciA9ICF2YWxpZDtcbiAgICB9KSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICB5aWVsZCBfdGhpczIudmFsaWRhdGUoKTtcblxuICAgICAgaWYgKF90aGlzMi5lcnJvcikge1xuICAgICAgICBfdGhpczIuY29sb3IgPSAncmVkJztcblxuICAgICAgICBfdGhpczIuZmlyZSgpO1xuXG4gICAgICAgIF90aGlzMi5yZW5kZXIoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzMi5kb25lID0gdHJ1ZTtcbiAgICAgIF90aGlzMi5hYm9ydGVkID0gZmFsc2U7XG5cbiAgICAgIF90aGlzMi5maXJlKCk7XG5cbiAgICAgIF90aGlzMi5yZW5kZXIoKTtcblxuICAgICAgX3RoaXMyLm91dC53cml0ZSgnXFxuJyk7XG5cbiAgICAgIF90aGlzMi5jbG9zZSgpO1xuICAgIH0pKCk7XG4gIH1cblxuICB1cCgpIHtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0udXAoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0uZG93bigpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIGxldCBwcmV2ID0gdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0ucHJldigpO1xuICAgIGlmIChwcmV2ID09IG51bGwpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5wYXJ0cy5pbmRleE9mKHByZXYpKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmlnaHQoKSB7XG4gICAgbGV0IG5leHQgPSB0aGlzLnBhcnRzW3RoaXMuY3Vyc29yXS5uZXh0KCk7XG4gICAgaWYgKG5leHQgPT0gbnVsbCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcih0aGlzLnBhcnRzLmluZGV4T2YobmV4dCkpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIGxldCBuZXh0ID0gdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0ubmV4dCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcihuZXh0ID8gdGhpcy5wYXJ0cy5pbmRleE9mKG5leHQpIDogdGhpcy5wYXJ0cy5maW5kSW5kZXgocGFydCA9PiBwYXJ0IGluc3RhbmNlb2YgRGF0ZVBhcnQpKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjKSB7XG4gICAgaWYgKC9cXGQvLnRlc3QoYykpIHtcbiAgICAgIHRoaXMudHlwZWQgKz0gYztcbiAgICAgIHRoaXMucGFydHNbdGhpcy5jdXJzb3JdLnNldFRvKHRoaXMudHlwZWQpO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtlbHNlIHRoaXMub3V0LndyaXRlKGNsZWFyKHRoaXMub3V0cHV0VGV4dCwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgIHN1cGVyLnJlbmRlcigpOyAvLyBQcmludCBwcm9tcHRcblxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLCBjb2xvci5ib2xkKHRoaXMubXNnKSwgc3R5bGUuZGVsaW1pdGVyKGZhbHNlKSwgdGhpcy5wYXJ0cy5yZWR1Y2UoKGFyciwgcCwgaWR4KSA9PiBhcnIuY29uY2F0KGlkeCA9PT0gdGhpcy5jdXJzb3IgJiYgIXRoaXMuZG9uZSA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUocC50b1N0cmluZygpKSA6IHApLCBbXSkuam9pbignJyldLmpvaW4oJyAnKTsgLy8gUHJpbnQgZXJyb3JcblxuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aGlzLm91dHB1dFRleHQgKz0gdGhpcy5lcnJvck1zZy5zcGxpdCgnXFxuJykucmVkdWNlKChhLCBsLCBpKSA9PiBhICsgYFxcbiR7aSA/IGAgYCA6IGZpZ3VyZXMucG9pbnRlclNtYWxsfSAke2NvbG9yLnJlZCgpLml0YWxpYyhsKX1gLCBgYCk7XG4gICAgfVxuXG4gICAgdGhpcy5vdXQud3JpdGUoZXJhc2UubGluZSArIGN1cnNvci50bygwKSArIHRoaXMub3V0cHV0VGV4dCk7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGVQcm9tcHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbmNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcblxuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBjdXJzb3IgPSBfcmVxdWlyZS5jdXJzb3IsXG4gICAgICBlcmFzZSA9IF9yZXF1aXJlLmVyYXNlO1xuXG5jb25zdCBfcmVxdWlyZTIgPSByZXF1aXJlKCcuLi91dGlsJyksXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlMi5zdHlsZSxcbiAgICAgIGZpZ3VyZXMgPSBfcmVxdWlyZTIuZmlndXJlcyxcbiAgICAgIGNsZWFyID0gX3JlcXVpcmUyLmNsZWFyLFxuICAgICAgbGluZXMgPSBfcmVxdWlyZTIubGluZXM7XG5cbmNvbnN0IGlzTnVtYmVyID0gL1swLTldLztcblxuY29uc3QgaXNEZWYgPSBhbnkgPT4gYW55ICE9PSB1bmRlZmluZWQ7XG5cbmNvbnN0IHJvdW5kID0gKG51bWJlciwgcHJlY2lzaW9uKSA9PiB7XG4gIGxldCBmYWN0b3IgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uKTtcbiAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyICogZmFjdG9yKSAvIGZhY3Rvcjtcbn07XG4vKipcbiAqIE51bWJlclByb21wdCBCYXNlIEVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLm1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnN0eWxlPSdkZWZhdWx0J10gUmVuZGVyIHN0eWxlXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5pdGlhbF0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm1heD0rSW5maW5pdHldIE1heCB2YWx1ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm1pbj0tSW5maW5pdHldIE1pbiB2YWx1ZVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5mbG9hdD1mYWxzZV0gUGFyc2UgaW5wdXQgYXMgZmxvYXRzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMucm91bmQ9Ml0gUm91bmQgZmxvYXRzIHRvIHggZGVjaW1hbHNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5pbmNyZW1lbnQ9MV0gTnVtYmVyIHRvIGluY3JlbWVudCBieSB3aGVuIHVzaW5nIGFycm93LWtleXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLnZhbGlkYXRlXSBWYWxpZGF0ZSBmdW5jdGlvblxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuZXJyb3JdIFRoZSBpbnZhbGlkIGVycm9yIGxhYmVsXG4gKi9cblxuXG5jbGFzcyBOdW1iZXJQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHN0eWxlLnJlbmRlcihvcHRzLnN0eWxlKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmluaXRpYWwgPSBpc0RlZihvcHRzLmluaXRpYWwpID8gb3B0cy5pbml0aWFsIDogJyc7XG4gICAgdGhpcy5mbG9hdCA9ICEhb3B0cy5mbG9hdDtcbiAgICB0aGlzLnJvdW5kID0gb3B0cy5yb3VuZCB8fCAyO1xuICAgIHRoaXMuaW5jID0gb3B0cy5pbmNyZW1lbnQgfHwgMTtcbiAgICB0aGlzLm1pbiA9IGlzRGVmKG9wdHMubWluKSA/IG9wdHMubWluIDogLUluZmluaXR5O1xuICAgIHRoaXMubWF4ID0gaXNEZWYob3B0cy5tYXgpID8gb3B0cy5tYXggOiBJbmZpbml0eTtcbiAgICB0aGlzLmVycm9yTXNnID0gb3B0cy5lcnJvciB8fCBgUGxlYXNlIEVudGVyIEEgVmFsaWQgVmFsdWVgO1xuXG4gICAgdGhpcy52YWxpZGF0b3IgPSBvcHRzLnZhbGlkYXRlIHx8ICgoKSA9PiB0cnVlKTtcblxuICAgIHRoaXMuY29sb3IgPSBgY3lhbmA7XG4gICAgdGhpcy52YWx1ZSA9IGBgO1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICB0aGlzLmxhc3RIaXQgPSAwO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgdmFsdWUodikge1xuICAgIGlmICghdiAmJiB2ICE9PSAwKSB7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVuZGVyZWQgPSBjb2xvci5ncmF5KHRoaXMudHJhbnNmb3JtLnJlbmRlcihgJHt0aGlzLmluaXRpYWx9YCkpO1xuICAgICAgdGhpcy5fdmFsdWUgPSBgYDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXJlZCA9IHRoaXMudHJhbnNmb3JtLnJlbmRlcihgJHtyb3VuZCh2LCB0aGlzLnJvdW5kKX1gKTtcbiAgICAgIHRoaXMuX3ZhbHVlID0gcm91bmQodiwgdGhpcy5yb3VuZCk7XG4gICAgfVxuXG4gICAgdGhpcy5maXJlKCk7XG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgcGFyc2UoeCkge1xuICAgIHJldHVybiB0aGlzLmZsb2F0ID8gcGFyc2VGbG9hdCh4KSA6IHBhcnNlSW50KHgpO1xuICB9XG5cbiAgdmFsaWQoYykge1xuICAgIHJldHVybiBjID09PSBgLWAgfHwgYyA9PT0gYC5gICYmIHRoaXMuZmxvYXQgfHwgaXNOdW1iZXIudGVzdChjKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGV4aXQoKSB7XG4gICAgdGhpcy5hYm9ydCgpO1xuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgbGV0IHggPSB0aGlzLnZhbHVlO1xuICAgIHRoaXMudmFsdWUgPSB4ICE9PSBgYCA/IHggOiB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZShgXFxuYCk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgdmFsaWRhdGUoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiogKCkge1xuICAgICAgbGV0IHZhbGlkID0geWllbGQgX3RoaXMudmFsaWRhdG9yKF90aGlzLnZhbHVlKTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWxpZCA9PT0gYHN0cmluZ2ApIHtcbiAgICAgICAgX3RoaXMuZXJyb3JNc2cgPSB2YWxpZDtcbiAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuZXJyb3IgPSAhdmFsaWQ7XG4gICAgfSkoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiogKCkge1xuICAgICAgeWllbGQgX3RoaXMyLnZhbGlkYXRlKCk7XG5cbiAgICAgIGlmIChfdGhpczIuZXJyb3IpIHtcbiAgICAgICAgX3RoaXMyLmNvbG9yID0gYHJlZGA7XG5cbiAgICAgICAgX3RoaXMyLmZpcmUoKTtcblxuICAgICAgICBfdGhpczIucmVuZGVyKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgeCA9IF90aGlzMi52YWx1ZTtcbiAgICAgIF90aGlzMi52YWx1ZSA9IHggIT09IGBgID8geCA6IF90aGlzMi5pbml0aWFsO1xuICAgICAgX3RoaXMyLmRvbmUgPSB0cnVlO1xuICAgICAgX3RoaXMyLmFib3J0ZWQgPSBmYWxzZTtcbiAgICAgIF90aGlzMi5lcnJvciA9IGZhbHNlO1xuXG4gICAgICBfdGhpczIuZmlyZSgpO1xuXG4gICAgICBfdGhpczIucmVuZGVyKCk7XG5cbiAgICAgIF90aGlzMi5vdXQud3JpdGUoYFxcbmApO1xuXG4gICAgICBfdGhpczIuY2xvc2UoKTtcbiAgICB9KSgpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy50eXBlZCA9IGBgO1xuXG4gICAgaWYgKHRoaXMudmFsdWUgPT09ICcnKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5taW4gLSB0aGlzLmluYztcbiAgICB9XG5cbiAgICBpZiAodGhpcy52YWx1ZSA+PSB0aGlzLm1heCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgKz0gdGhpcy5pbmM7XG4gICAgdGhpcy5jb2xvciA9IGBjeWFuYDtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLnR5cGVkID0gYGA7XG5cbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gJycpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1pbiArIHRoaXMuaW5jO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZhbHVlIDw9IHRoaXMubWluKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSAtPSB0aGlzLmluYztcbiAgICB0aGlzLmNvbG9yID0gYGN5YW5gO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgbGV0IHZhbCA9IHRoaXMudmFsdWUudG9TdHJpbmcoKTtcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnBhcnNlKHZhbCA9IHZhbC5zbGljZSgwLCAtMSkpIHx8IGBgO1xuXG4gICAgaWYgKHRoaXMudmFsdWUgIT09ICcnICYmIHRoaXMudmFsdWUgPCB0aGlzLm1pbikge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluO1xuICAgIH1cblxuICAgIHRoaXMuY29sb3IgPSBgY3lhbmA7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuaW5pdGlhbDtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoIXRoaXMudmFsaWQoYykpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmIChub3cgLSB0aGlzLmxhc3RIaXQgPiAxMDAwKSB0aGlzLnR5cGVkID0gYGA7IC8vIDFzIGVsYXBzZWRcblxuICAgIHRoaXMudHlwZWQgKz0gYztcbiAgICB0aGlzLmxhc3RIaXQgPSBub3c7XG4gICAgdGhpcy5jb2xvciA9IGBjeWFuYDtcbiAgICBpZiAoYyA9PT0gYC5gKSByZXR1cm4gdGhpcy5maXJlKCk7XG4gICAgdGhpcy52YWx1ZSA9IE1hdGgubWluKHRoaXMucGFyc2UodGhpcy50eXBlZCksIHRoaXMubWF4KTtcbiAgICBpZiAodGhpcy52YWx1ZSA+IHRoaXMubWF4KSB0aGlzLnZhbHVlID0gdGhpcy5tYXg7XG4gICAgaWYgKHRoaXMudmFsdWUgPCB0aGlzLm1pbikgdGhpcy52YWx1ZSA9IHRoaXMubWluO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG5cbiAgICBpZiAoIXRoaXMuZmlyc3RSZW5kZXIpIHtcbiAgICAgIGlmICh0aGlzLm91dHB1dEVycm9yKSB0aGlzLm91dC53cml0ZShjdXJzb3IuZG93bihsaW5lcyh0aGlzLm91dHB1dEVycm9yLCB0aGlzLm91dC5jb2x1bW5zKSAtIDEpICsgY2xlYXIodGhpcy5vdXRwdXRFcnJvciwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgICAgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgfVxuXG4gICAgc3VwZXIucmVuZGVyKCk7XG4gICAgdGhpcy5vdXRwdXRFcnJvciA9ICcnOyAvLyBQcmludCBwcm9tcHRcblxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLCBjb2xvci5ib2xkKHRoaXMubXNnKSwgc3R5bGUuZGVsaW1pdGVyKHRoaXMuZG9uZSksICF0aGlzLmRvbmUgfHwgIXRoaXMuZG9uZSAmJiAhdGhpcy5wbGFjZWhvbGRlciA/IGNvbG9yW3RoaXMuY29sb3JdKCkudW5kZXJsaW5lKHRoaXMucmVuZGVyZWQpIDogdGhpcy5yZW5kZXJlZF0uam9pbihgIGApOyAvLyBQcmludCBlcnJvclxuXG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIHRoaXMub3V0cHV0RXJyb3IgKz0gdGhpcy5lcnJvck1zZy5zcGxpdChgXFxuYCkucmVkdWNlKChhLCBsLCBpKSA9PiBhICsgYFxcbiR7aSA/IGAgYCA6IGZpZ3VyZXMucG9pbnRlclNtYWxsfSAke2NvbG9yLnJlZCgpLml0YWxpYyhsKX1gLCBgYCk7XG4gICAgfVxuXG4gICAgdGhpcy5vdXQud3JpdGUoZXJhc2UubGluZSArIGN1cnNvci50bygwKSArIHRoaXMub3V0cHV0VGV4dCArIGN1cnNvci5zYXZlICsgdGhpcy5vdXRwdXRFcnJvciArIGN1cnNvci5yZXN0b3JlKTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyUHJvbXB0OyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuXG5jb25zdCBfcmVxdWlyZSA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKSxcbiAgICAgIGN1cnNvciA9IF9yZXF1aXJlLmN1cnNvcjtcblxuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcblxuY29uc3QgX3JlcXVpcmUyID0gcmVxdWlyZSgnLi4vdXRpbCcpLFxuICAgICAgY2xlYXIgPSBfcmVxdWlyZTIuY2xlYXIsXG4gICAgICBmaWd1cmVzID0gX3JlcXVpcmUyLmZpZ3VyZXMsXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlMi5zdHlsZSxcbiAgICAgIHdyYXAgPSBfcmVxdWlyZTIud3JhcCxcbiAgICAgIGVudHJpZXNUb0Rpc3BsYXkgPSBfcmVxdWlyZTIuZW50cmllc1RvRGlzcGxheTtcbi8qKlxuICogTXVsdGlzZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLndhcm5dIEhpbnQgc2hvd24gZm9yIGRpc2FibGVkIGNob2ljZXNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXhdIE1heCBjaG9pY2VzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm9wdGlvbnNQZXJQYWdlPTEwXSBNYXggb3B0aW9ucyB0byBkaXNwbGF5IGF0IG9uY2VcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5cblxuY2xhc3MgTXVsdGlzZWxlY3RQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmN1cnNvciA9IG9wdHMuY3Vyc29yIHx8IDA7XG4gICAgdGhpcy5zY3JvbGxJbmRleCA9IG9wdHMuY3Vyc29yIHx8IDA7XG4gICAgdGhpcy5oaW50ID0gb3B0cy5oaW50IHx8ICcnO1xuICAgIHRoaXMud2FybiA9IG9wdHMud2FybiB8fCAnLSBUaGlzIG9wdGlvbiBpcyBkaXNhYmxlZCAtJztcbiAgICB0aGlzLm1pblNlbGVjdGVkID0gb3B0cy5taW47XG4gICAgdGhpcy5zaG93TWluRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLm1heENob2ljZXMgPSBvcHRzLm1heDtcbiAgICB0aGlzLmluc3RydWN0aW9ucyA9IG9wdHMuaW5zdHJ1Y3Rpb25zO1xuICAgIHRoaXMub3B0aW9uc1BlclBhZ2UgPSBvcHRzLm9wdGlvbnNQZXJQYWdlIHx8IDEwO1xuICAgIHRoaXMudmFsdWUgPSBvcHRzLmNob2ljZXMubWFwKChjaCwgaWR4KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNoID09PSAnc3RyaW5nJykgY2ggPSB7XG4gICAgICAgIHRpdGxlOiBjaCxcbiAgICAgICAgdmFsdWU6IGlkeFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBjaCAmJiAoY2gudGl0bGUgfHwgY2gudmFsdWUgfHwgY2gpLFxuICAgICAgICBkZXNjcmlwdGlvbjogY2ggJiYgY2guZGVzY3JpcHRpb24sXG4gICAgICAgIHZhbHVlOiBjaCAmJiAoY2gudmFsdWUgPT09IHVuZGVmaW5lZCA/IGlkeCA6IGNoLnZhbHVlKSxcbiAgICAgICAgc2VsZWN0ZWQ6IGNoICYmIGNoLnNlbGVjdGVkLFxuICAgICAgICBkaXNhYmxlZDogY2ggJiYgY2guZGlzYWJsZWRcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcblxuICAgIGlmICghb3B0cy5vdmVycmlkZVJlbmRlcikge1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnZhbHVlLm1hcCh2ID0+ICF2LnNlbGVjdGVkKTtcbiAgICB0aGlzLmN1cnNvciA9IDA7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlLmZpbHRlcih2ID0+IHYuc2VsZWN0ZWQpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMudmFsdWUuZmlsdGVyKGUgPT4gZS5zZWxlY3RlZCk7XG5cbiAgICBpZiAodGhpcy5taW5TZWxlY3RlZCAmJiBzZWxlY3RlZC5sZW5ndGggPCB0aGlzLm1pblNlbGVjdGVkKSB7XG4gICAgICB0aGlzLnNob3dNaW5FcnJvciA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgZmlyc3QoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsYXN0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy52YWx1ZS5sZW5ndGggLSAxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gKHRoaXMuY3Vyc29yICsgMSkgJSB0aGlzLnZhbHVlLmxlbmd0aDtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSAwKSB7XG4gICAgICB0aGlzLmN1cnNvciA9IHRoaXMudmFsdWUubGVuZ3RoIC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJzb3ItLTtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IgPT09IHRoaXMudmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvcisrO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIHRoaXMudmFsdWVbdGhpcy5jdXJzb3JdLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJpZ2h0KCkge1xuICAgIGlmICh0aGlzLnZhbHVlLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpLmxlbmd0aCA+PSB0aGlzLm1heENob2ljZXMpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLnZhbHVlW3RoaXMuY3Vyc29yXS5zZWxlY3RlZCA9IHRydWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGhhbmRsZVNwYWNlVG9nZ2xlKCkge1xuICAgIGNvbnN0IHYgPSB0aGlzLnZhbHVlW3RoaXMuY3Vyc29yXTtcblxuICAgIGlmICh2LnNlbGVjdGVkKSB7XG4gICAgICB2LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0gZWxzZSBpZiAodi5kaXNhYmxlZCB8fCB0aGlzLnZhbHVlLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpLmxlbmd0aCA+PSB0aGlzLm1heENob2ljZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUFsbCgpIHtcbiAgICBpZiAodGhpcy5tYXhDaG9pY2VzICE9PSB1bmRlZmluZWQgfHwgdGhpcy52YWx1ZVt0aGlzLmN1cnNvcl0uZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdTZWxlY3RlZCA9ICF0aGlzLnZhbHVlW3RoaXMuY3Vyc29yXS5zZWxlY3RlZDtcbiAgICB0aGlzLnZhbHVlLmZpbHRlcih2ID0+ICF2LmRpc2FibGVkKS5mb3JFYWNoKHYgPT4gdi5zZWxlY3RlZCA9IG5ld1NlbGVjdGVkKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYyA9PT0gJyAnKSB7XG4gICAgICB0aGlzLmhhbmRsZVNwYWNlVG9nZ2xlKCk7XG4gICAgfSBlbHNlIGlmIChjID09PSAnYScpIHtcbiAgICAgIHRoaXMudG9nZ2xlQWxsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuaW5zdHJ1Y3Rpb25zID09PSB1bmRlZmluZWQgfHwgdGhpcy5pbnN0cnVjdGlvbnMpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnN0cnVjdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluc3RydWN0aW9ucztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICdcXG5JbnN0cnVjdGlvbnM6XFxuJyArIGAgICAgJHtmaWd1cmVzLmFycm93VXB9LyR7ZmlndXJlcy5hcnJvd0Rvd259OiBIaWdobGlnaHQgb3B0aW9uXFxuYCArIGAgICAgJHtmaWd1cmVzLmFycm93TGVmdH0vJHtmaWd1cmVzLmFycm93UmlnaHR9L1tzcGFjZV06IFRvZ2dsZSBzZWxlY3Rpb25cXG5gICsgKHRoaXMubWF4Q2hvaWNlcyA9PT0gdW5kZWZpbmVkID8gYCAgICBhOiBUb2dnbGUgYWxsXFxuYCA6ICcnKSArIGAgICAgZW50ZXIvcmV0dXJuOiBDb21wbGV0ZSBhbnN3ZXJgO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlck9wdGlvbihjdXJzb3IsIHYsIGksIGFycm93SW5kaWNhdG9yKSB7XG4gICAgY29uc3QgcHJlZml4ID0gKHYuc2VsZWN0ZWQgPyBjb2xvci5ncmVlbihmaWd1cmVzLnJhZGlvT24pIDogZmlndXJlcy5yYWRpb09mZikgKyAnICcgKyBhcnJvd0luZGljYXRvciArICcgJztcbiAgICBsZXQgdGl0bGUsIGRlc2M7XG5cbiAgICBpZiAodi5kaXNhYmxlZCkge1xuICAgICAgdGl0bGUgPSBjdXJzb3IgPT09IGkgPyBjb2xvci5ncmF5KCkudW5kZXJsaW5lKHYudGl0bGUpIDogY29sb3Iuc3RyaWtldGhyb3VnaCgpLmdyYXkodi50aXRsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpdGxlID0gY3Vyc29yID09PSBpID8gY29sb3IuY3lhbigpLnVuZGVybGluZSh2LnRpdGxlKSA6IHYudGl0bGU7XG5cbiAgICAgIGlmIChjdXJzb3IgPT09IGkgJiYgdi5kZXNjcmlwdGlvbikge1xuICAgICAgICBkZXNjID0gYCAtICR7di5kZXNjcmlwdGlvbn1gO1xuXG4gICAgICAgIGlmIChwcmVmaXgubGVuZ3RoICsgdGl0bGUubGVuZ3RoICsgZGVzYy5sZW5ndGggPj0gdGhpcy5vdXQuY29sdW1ucyB8fCB2LmRlc2NyaXB0aW9uLnNwbGl0KC9cXHI/XFxuLykubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGRlc2MgPSAnXFxuJyArIHdyYXAodi5kZXNjcmlwdGlvbiwge1xuICAgICAgICAgICAgbWFyZ2luOiBwcmVmaXgubGVuZ3RoLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMub3V0LmNvbHVtbnNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcmVmaXggKyB0aXRsZSArIGNvbG9yLmdyYXkoZGVzYyB8fCAnJyk7XG4gIH0gLy8gc2hhcmVkIHdpdGggYXV0b2NvbXBsZXRlTXVsdGlzZWxlY3RcblxuXG4gIHBhZ2luYXRlT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gY29sb3IucmVkKCdObyBtYXRjaGVzIGZvciB0aGlzIHF1ZXJ5LicpO1xuICAgIH1cblxuICAgIGxldCBfZW50cmllc1RvRGlzcGxheSA9IGVudHJpZXNUb0Rpc3BsYXkodGhpcy5jdXJzb3IsIG9wdGlvbnMubGVuZ3RoLCB0aGlzLm9wdGlvbnNQZXJQYWdlKSxcbiAgICAgICAgc3RhcnRJbmRleCA9IF9lbnRyaWVzVG9EaXNwbGF5LnN0YXJ0SW5kZXgsXG4gICAgICAgIGVuZEluZGV4ID0gX2VudHJpZXNUb0Rpc3BsYXkuZW5kSW5kZXg7XG5cbiAgICBsZXQgcHJlZml4LFxuICAgICAgICBzdHlsZWRPcHRpb25zID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA8IGVuZEluZGV4OyBpKyspIHtcbiAgICAgIGlmIChpID09PSBzdGFydEluZGV4ICYmIHN0YXJ0SW5kZXggPiAwKSB7XG4gICAgICAgIHByZWZpeCA9IGZpZ3VyZXMuYXJyb3dVcDtcbiAgICAgIH0gZWxzZSBpZiAoaSA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgcHJlZml4ID0gZmlndXJlcy5hcnJvd0Rvd247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcmVmaXggPSAnICc7XG4gICAgICB9XG5cbiAgICAgIHN0eWxlZE9wdGlvbnMucHVzaCh0aGlzLnJlbmRlck9wdGlvbih0aGlzLmN1cnNvciwgb3B0aW9uc1tpXSwgaSwgcHJlZml4KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICdcXG4nICsgc3R5bGVkT3B0aW9ucy5qb2luKCdcXG4nKTtcbiAgfSAvLyBzaGFyZWQgd2l0aCBhdXRvY29tbGV0ZU11bHRpc2VsZWN0XG5cblxuICByZW5kZXJPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAoIXRoaXMuZG9uZSkge1xuICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGVPcHRpb25zKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlckRvbmVPckluc3RydWN0aW9ucygpIHtcbiAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5tYXAodiA9PiB2LnRpdGxlKS5qb2luKCcsICcpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IFtjb2xvci5ncmF5KHRoaXMuaGludCksIHRoaXMucmVuZGVySW5zdHJ1Y3Rpb25zKCldO1xuXG4gICAgaWYgKHRoaXMudmFsdWVbdGhpcy5jdXJzb3JdLmRpc2FibGVkKSB7XG4gICAgICBvdXRwdXQucHVzaChjb2xvci55ZWxsb3codGhpcy53YXJuKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dC5qb2luKCcgJyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtcbiAgICBzdXBlci5yZW5kZXIoKTsgLy8gcHJpbnQgcHJvbXB0XG5cbiAgICBsZXQgcHJvbXB0ID0gW3N0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksIGNvbG9yLmJvbGQodGhpcy5tc2cpLCBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLCB0aGlzLnJlbmRlckRvbmVPckluc3RydWN0aW9ucygpXS5qb2luKCcgJyk7XG5cbiAgICBpZiAodGhpcy5zaG93TWluRXJyb3IpIHtcbiAgICAgIHByb21wdCArPSBjb2xvci5yZWQoYFlvdSBtdXN0IHNlbGVjdCBhIG1pbmltdW0gb2YgJHt0aGlzLm1pblNlbGVjdGVkfSBjaG9pY2VzLmApO1xuICAgICAgdGhpcy5zaG93TWluRXJyb3IgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcm9tcHQgKz0gdGhpcy5yZW5kZXJPcHRpb25zKHRoaXMudmFsdWUpO1xuICAgIHRoaXMub3V0LndyaXRlKHRoaXMuY2xlYXIgKyBwcm9tcHQpO1xuICAgIHRoaXMuY2xlYXIgPSBjbGVhcihwcm9tcHQsIHRoaXMub3V0LmNvbHVtbnMpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNdWx0aXNlbGVjdFByb21wdDsiLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbmNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcblxuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBlcmFzZSA9IF9yZXF1aXJlLmVyYXNlLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUuY3Vyc29yO1xuXG5jb25zdCBfcmVxdWlyZTIgPSByZXF1aXJlKCcuLi91dGlsJyksXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlMi5zdHlsZSxcbiAgICAgIGNsZWFyID0gX3JlcXVpcmUyLmNsZWFyLFxuICAgICAgZmlndXJlcyA9IF9yZXF1aXJlMi5maWd1cmVzLFxuICAgICAgd3JhcCA9IF9yZXF1aXJlMi53cmFwLFxuICAgICAgZW50cmllc1RvRGlzcGxheSA9IF9yZXF1aXJlMi5lbnRyaWVzVG9EaXNwbGF5O1xuXG5jb25zdCBnZXRWYWwgPSAoYXJyLCBpKSA9PiBhcnJbaV0gJiYgKGFycltpXS52YWx1ZSB8fCBhcnJbaV0udGl0bGUgfHwgYXJyW2ldKTtcblxuY29uc3QgZ2V0VGl0bGUgPSAoYXJyLCBpKSA9PiBhcnJbaV0gJiYgKGFycltpXS50aXRsZSB8fCBhcnJbaV0udmFsdWUgfHwgYXJyW2ldKTtcblxuY29uc3QgZ2V0SW5kZXggPSAoYXJyLCB2YWxPclRpdGxlKSA9PiB7XG4gIGNvbnN0IGluZGV4ID0gYXJyLmZpbmRJbmRleChlbCA9PiBlbC52YWx1ZSA9PT0gdmFsT3JUaXRsZSB8fCBlbC50aXRsZSA9PT0gdmFsT3JUaXRsZSk7XG4gIHJldHVybiBpbmRleCA+IC0xID8gaW5kZXggOiB1bmRlZmluZWQ7XG59O1xuLyoqXG4gKiBUZXh0UHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge0FycmF5fSBvcHRzLmNob2ljZXMgQXJyYXkgb2YgYXV0by1jb21wbGV0ZSBjaG9pY2VzIG9iamVjdHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLnN1Z2dlc3RdIEZpbHRlciBmdW5jdGlvbi4gRGVmYXVsdHMgdG8gc29ydCBieSB0aXRsZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmxpbWl0PTEwXSBNYXggbnVtYmVyIG9mIHJlc3VsdHMgdG8gc2hvd1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmN1cnNvcj0wXSBDdXJzb3Igc3RhcnQgcG9zaXRpb25cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5zdHlsZT0nZGVmYXVsdCddIFJlbmRlciBzdHlsZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmZhbGxiYWNrXSBGYWxsYmFjayBtZXNzYWdlIC0gaW5pdGlhbCB0byBkZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuaW5pdGlhbF0gSW5kZXggb2YgdGhlIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuY2xlYXJGaXJzdF0gVGhlIGZpcnN0IEVTQ0FQRSBrZXlwcmVzcyB3aWxsIGNsZWFyIHRoZSBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMubm9NYXRjaGVzXSBUaGUgbm8gbWF0Y2hlcyBmb3VuZCBsYWJlbFxuICovXG5cblxuY2xhc3MgQXV0b2NvbXBsZXRlUHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy5zdWdnZXN0ID0gb3B0cy5zdWdnZXN0O1xuICAgIHRoaXMuY2hvaWNlcyA9IG9wdHMuY2hvaWNlcztcbiAgICB0aGlzLmluaXRpYWwgPSB0eXBlb2Ygb3B0cy5pbml0aWFsID09PSAnbnVtYmVyJyA/IG9wdHMuaW5pdGlhbCA6IGdldEluZGV4KG9wdHMuY2hvaWNlcywgb3B0cy5pbml0aWFsKTtcbiAgICB0aGlzLnNlbGVjdCA9IHRoaXMuaW5pdGlhbCB8fCBvcHRzLmN1cnNvciB8fCAwO1xuICAgIHRoaXMuaTE4biA9IHtcbiAgICAgIG5vTWF0Y2hlczogb3B0cy5ub01hdGNoZXMgfHwgJ25vIG1hdGNoZXMgZm91bmQnXG4gICAgfTtcbiAgICB0aGlzLmZhbGxiYWNrID0gb3B0cy5mYWxsYmFjayB8fCB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5jbGVhckZpcnN0ID0gb3B0cy5jbGVhckZpcnN0IHx8IGZhbHNlO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBbXTtcbiAgICB0aGlzLmlucHV0ID0gJyc7XG4gICAgdGhpcy5saW1pdCA9IG9wdHMubGltaXQgfHwgMTA7XG4gICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIHRoaXMudHJhbnNmb3JtID0gc3R5bGUucmVuZGVyKG9wdHMuc3R5bGUpO1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZTtcbiAgICB0aGlzLnJlbmRlciA9IHRoaXMucmVuZGVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5jb21wbGV0ZSA9IHRoaXMuY29tcGxldGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLmNsZWFyID0gY2xlYXIoJycsIHRoaXMub3V0LmNvbHVtbnMpO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgZmFsbGJhY2soZmIpIHtcbiAgICB0aGlzLl9mYiA9IE51bWJlci5pc1NhZmVJbnRlZ2VyKHBhcnNlSW50KGZiKSkgPyBwYXJzZUludChmYikgOiBmYjtcbiAgfVxuXG4gIGdldCBmYWxsYmFjaygpIHtcbiAgICBsZXQgY2hvaWNlO1xuICAgIGlmICh0eXBlb2YgdGhpcy5fZmIgPT09ICdudW1iZXInKSBjaG9pY2UgPSB0aGlzLmNob2ljZXNbdGhpcy5fZmJdO2Vsc2UgaWYgKHR5cGVvZiB0aGlzLl9mYiA9PT0gJ3N0cmluZycpIGNob2ljZSA9IHtcbiAgICAgIHRpdGxlOiB0aGlzLl9mYlxuICAgIH07XG4gICAgcmV0dXJuIGNob2ljZSB8fCB0aGlzLl9mYiB8fCB7XG4gICAgICB0aXRsZTogdGhpcy5pMThuLm5vTWF0Y2hlc1xuICAgIH07XG4gIH1cblxuICBtb3ZlU2VsZWN0KGkpIHtcbiAgICB0aGlzLnNlbGVjdCA9IGk7XG4gICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkgdGhpcy52YWx1ZSA9IGdldFZhbCh0aGlzLnN1Z2dlc3Rpb25zLCBpKTtlbHNlIHRoaXMudmFsdWUgPSB0aGlzLmZhbGxiYWNrLnZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICB9XG5cbiAgY29tcGxldGUoY2IpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBjb25zdCBwID0gX3RoaXMuY29tcGxldGluZyA9IF90aGlzLnN1Z2dlc3QoX3RoaXMuaW5wdXQsIF90aGlzLmNob2ljZXMpO1xuXG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHlpZWxkIHA7XG4gICAgICBpZiAoX3RoaXMuY29tcGxldGluZyAhPT0gcCkgcmV0dXJuO1xuICAgICAgX3RoaXMuc3VnZ2VzdGlvbnMgPSBzdWdnZXN0aW9ucy5tYXAoKHMsIGksIGFycikgPT4gKHtcbiAgICAgICAgdGl0bGU6IGdldFRpdGxlKGFyciwgaSksXG4gICAgICAgIHZhbHVlOiBnZXRWYWwoYXJyLCBpKSxcbiAgICAgICAgZGVzY3JpcHRpb246IHMuZGVzY3JpcHRpb25cbiAgICAgIH0pKTtcbiAgICAgIF90aGlzLmNvbXBsZXRpbmcgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGwgPSBNYXRoLm1heChzdWdnZXN0aW9ucy5sZW5ndGggLSAxLCAwKTtcblxuICAgICAgX3RoaXMubW92ZVNlbGVjdChNYXRoLm1pbihsLCBfdGhpcy5zZWxlY3QpKTtcblxuICAgICAgY2IgJiYgY2IoKTtcbiAgICB9KSgpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5pbnB1dCA9ICcnO1xuICAgIHRoaXMuY29tcGxldGUoKCkgPT4ge1xuICAgICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuaW5pdGlhbCAhPT0gdm9pZCAwID8gdGhpcy5pbml0aWFsIDogMCk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0pO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIGlmICh0aGlzLmNsZWFyRmlyc3QgJiYgdGhpcy5pbnB1dC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRoaXMuZXhpdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5maXJlKCk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuZG9uZSA9IHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5leGl0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBzdWJtaXQoKSB7XG4gICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICB0aGlzLmFib3J0ZWQgPSB0aGlzLmV4aXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIF8oYywga2V5KSB7XG4gICAgbGV0IHMxID0gdGhpcy5pbnB1dC5zbGljZSgwLCB0aGlzLmN1cnNvcik7XG4gICAgbGV0IHMyID0gdGhpcy5pbnB1dC5zbGljZSh0aGlzLmN1cnNvcik7XG4gICAgdGhpcy5pbnB1dCA9IGAke3MxfSR7Y30ke3MyfWA7XG4gICAgdGhpcy5jdXJzb3IgPSBzMS5sZW5ndGggKyAxO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSAwKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgbGV0IHMxID0gdGhpcy5pbnB1dC5zbGljZSgwLCB0aGlzLmN1cnNvciAtIDEpO1xuICAgIGxldCBzMiA9IHRoaXMuaW5wdXQuc2xpY2UodGhpcy5jdXJzb3IpO1xuICAgIHRoaXMuaW5wdXQgPSBgJHtzMX0ke3MyfWA7XG4gICAgdGhpcy5jb21wbGV0ZSh0aGlzLnJlbmRlcik7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmN1cnNvciAtIDE7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGRlbGV0ZUZvcndhcmQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yICogdGhpcy5zY2FsZSA+PSB0aGlzLnJlbmRlcmVkLmxlbmd0aCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIGxldCBzMSA9IHRoaXMuaW5wdXQuc2xpY2UoMCwgdGhpcy5jdXJzb3IpO1xuICAgIGxldCBzMiA9IHRoaXMuaW5wdXQuc2xpY2UodGhpcy5jdXJzb3IgKyAxKTtcbiAgICB0aGlzLmlucHV0ID0gYCR7czF9JHtzMn1gO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBmaXJzdCgpIHtcbiAgICB0aGlzLm1vdmVTZWxlY3QoMCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxhc3QoKSB7XG4gICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdCA9PT0gMCkge1xuICAgICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCh0aGlzLnNlbGVjdCAtIDEpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdCA9PT0gdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLm1vdmVTZWxlY3QoMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCh0aGlzLnNlbGVjdCArIDEpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIGlmICh0aGlzLnNlbGVjdCA9PT0gdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLm1vdmVTZWxlY3QoMCk7XG4gICAgfSBlbHNlIHRoaXMubW92ZVNlbGVjdCh0aGlzLnNlbGVjdCArIDEpO1xuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG5leHRQYWdlKCkge1xuICAgIHRoaXMubW92ZVNlbGVjdChNYXRoLm1pbih0aGlzLnNlbGVjdCArIHRoaXMubGltaXQsIHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSkpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBwcmV2UGFnZSgpIHtcbiAgICB0aGlzLm1vdmVTZWxlY3QoTWF0aC5tYXgodGhpcy5zZWxlY3QgLSB0aGlzLmxpbWl0LCAwKSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxlZnQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yIDw9IDApIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMuY3Vyc29yIC0gMTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmlnaHQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yICogdGhpcy5zY2FsZSA+PSB0aGlzLnJlbmRlcmVkLmxlbmd0aCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5jdXJzb3IgKyAxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByZW5kZXJPcHRpb24odiwgaG92ZXJlZCwgaXNTdGFydCwgaXNFbmQpIHtcbiAgICBsZXQgZGVzYztcbiAgICBsZXQgcHJlZml4ID0gaXNTdGFydCA/IGZpZ3VyZXMuYXJyb3dVcCA6IGlzRW5kID8gZmlndXJlcy5hcnJvd0Rvd24gOiAnICc7XG4gICAgbGV0IHRpdGxlID0gaG92ZXJlZCA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodi50aXRsZSkgOiB2LnRpdGxlO1xuICAgIHByZWZpeCA9IChob3ZlcmVkID8gY29sb3IuY3lhbihmaWd1cmVzLnBvaW50ZXIpICsgJyAnIDogJyAgJykgKyBwcmVmaXg7XG5cbiAgICBpZiAodi5kZXNjcmlwdGlvbikge1xuICAgICAgZGVzYyA9IGAgLSAke3YuZGVzY3JpcHRpb259YDtcblxuICAgICAgaWYgKHByZWZpeC5sZW5ndGggKyB0aXRsZS5sZW5ndGggKyBkZXNjLmxlbmd0aCA+PSB0aGlzLm91dC5jb2x1bW5zIHx8IHYuZGVzY3JpcHRpb24uc3BsaXQoL1xccj9cXG4vKS5sZW5ndGggPiAxKSB7XG4gICAgICAgIGRlc2MgPSAnXFxuJyArIHdyYXAodi5kZXNjcmlwdGlvbiwge1xuICAgICAgICAgIG1hcmdpbjogMyxcbiAgICAgICAgICB3aWR0aDogdGhpcy5vdXQuY29sdW1uc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJlZml4ICsgJyAnICsgdGl0bGUgKyBjb2xvci5ncmF5KGRlc2MgfHwgJycpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7ZWxzZSB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICBzdXBlci5yZW5kZXIoKTtcblxuICAgIGxldCBfZW50cmllc1RvRGlzcGxheSA9IGVudHJpZXNUb0Rpc3BsYXkodGhpcy5zZWxlY3QsIHRoaXMuY2hvaWNlcy5sZW5ndGgsIHRoaXMubGltaXQpLFxuICAgICAgICBzdGFydEluZGV4ID0gX2VudHJpZXNUb0Rpc3BsYXkuc3RhcnRJbmRleCxcbiAgICAgICAgZW5kSW5kZXggPSBfZW50cmllc1RvRGlzcGxheS5lbmRJbmRleDtcblxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQsIHRoaXMuZXhpdGVkKSwgY29sb3IuYm9sZCh0aGlzLm1zZyksIHN0eWxlLmRlbGltaXRlcih0aGlzLmNvbXBsZXRpbmcpLCB0aGlzLmRvbmUgJiYgdGhpcy5zdWdnZXN0aW9uc1t0aGlzLnNlbGVjdF0gPyB0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuc2VsZWN0XS50aXRsZSA6IHRoaXMucmVuZGVyZWQgPSB0aGlzLnRyYW5zZm9ybS5yZW5kZXIodGhpcy5pbnB1dCldLmpvaW4oJyAnKTtcblxuICAgIGlmICghdGhpcy5kb25lKSB7XG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHRoaXMuc3VnZ2VzdGlvbnMuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpLm1hcCgoaXRlbSwgaSkgPT4gdGhpcy5yZW5kZXJPcHRpb24oaXRlbSwgdGhpcy5zZWxlY3QgPT09IGkgKyBzdGFydEluZGV4LCBpID09PSAwICYmIHN0YXJ0SW5kZXggPiAwLCBpICsgc3RhcnRJbmRleCA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgdGhpcy5jaG9pY2VzLmxlbmd0aCkpLmpvaW4oJ1xcbicpO1xuICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9IGBcXG5gICsgKHN1Z2dlc3Rpb25zIHx8IGNvbG9yLmdyYXkodGhpcy5mYWxsYmFjay50aXRsZSkpO1xuICAgIH1cblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBdXRvY29tcGxldGVQcm9tcHQ7IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5cbmNvbnN0IF9yZXF1aXJlID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUuY3Vyc29yO1xuXG5jb25zdCBNdWx0aXNlbGVjdFByb21wdCA9IHJlcXVpcmUoJy4vbXVsdGlzZWxlY3QnKTtcblxuY29uc3QgX3JlcXVpcmUyID0gcmVxdWlyZSgnLi4vdXRpbCcpLFxuICAgICAgY2xlYXIgPSBfcmVxdWlyZTIuY2xlYXIsXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlMi5zdHlsZSxcbiAgICAgIGZpZ3VyZXMgPSBfcmVxdWlyZTIuZmlndXJlcztcbi8qKlxuICogTXVsdGlzZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLndhcm5dIEhpbnQgc2hvd24gZm9yIGRpc2FibGVkIGNob2ljZXNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXhdIE1heCBjaG9pY2VzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKi9cblxuXG5jbGFzcyBBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdCBleHRlbmRzIE11bHRpc2VsZWN0UHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgb3B0cy5vdmVycmlkZVJlbmRlciA9IHRydWU7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gJyc7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxhc3QoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gKHRoaXMuY3Vyc29yICsgMSkgJSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGg7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gMCkge1xuICAgICAgdGhpcy5jdXJzb3IgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvci0tO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvcisrO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuY3Vyc29yXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByaWdodCgpIHtcbiAgICBpZiAodGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy5jdXJzb3JdLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlKCkge1xuICAgIGlmICh0aGlzLmlucHV0VmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmlucHV0VmFsdWUuc3Vic3RyKDAsIHRoaXMuaW5wdXRWYWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWRPcHRpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRmlsdGVyZWRPcHRpb25zKCkge1xuICAgIGNvbnN0IGN1cnJlbnRIaWdobGlnaHQgPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmN1cnNvcl07XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLnZhbHVlLmZpbHRlcih2ID0+IHtcbiAgICAgIGlmICh0aGlzLmlucHV0VmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2LnRpdGxlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh2LnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5pbnB1dFZhbHVlLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHYudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKHYudmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmlucHV0VmFsdWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gICAgY29uc3QgbmV3SGlnaGxpZ2h0SW5kZXggPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5maW5kSW5kZXgodiA9PiB2ID09PSBjdXJyZW50SGlnaGxpZ2h0KTtcbiAgICB0aGlzLmN1cnNvciA9IG5ld0hpZ2hsaWdodEluZGV4IDwgMCA/IDAgOiBuZXdIaWdobGlnaHRJbmRleDtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgaGFuZGxlU3BhY2VUb2dnbGUoKSB7XG4gICAgY29uc3QgdiA9IHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuY3Vyc29yXTtcblxuICAgIGlmICh2LnNlbGVjdGVkKSB7XG4gICAgICB2LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0gZWxzZSBpZiAodi5kaXNhYmxlZCB8fCB0aGlzLnZhbHVlLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpLmxlbmd0aCA+PSB0aGlzLm1heENob2ljZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUlucHV0Q2hhbmdlKGMpIHtcbiAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmlucHV0VmFsdWUgKyBjO1xuICAgIHRoaXMudXBkYXRlRmlsdGVyZWRPcHRpb25zKCk7XG4gIH1cblxuICBfKGMsIGtleSkge1xuICAgIGlmIChjID09PSAnICcpIHtcbiAgICAgIHRoaXMuaGFuZGxlU3BhY2VUb2dnbGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVJbnB1dENoYW5nZShjKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuaW5zdHJ1Y3Rpb25zID09PSB1bmRlZmluZWQgfHwgdGhpcy5pbnN0cnVjdGlvbnMpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnN0cnVjdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluc3RydWN0aW9ucztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGBcbkluc3RydWN0aW9uczpcbiAgICAke2ZpZ3VyZXMuYXJyb3dVcH0vJHtmaWd1cmVzLmFycm93RG93bn06IEhpZ2hsaWdodCBvcHRpb25cbiAgICAke2ZpZ3VyZXMuYXJyb3dMZWZ0fS8ke2ZpZ3VyZXMuYXJyb3dSaWdodH0vW3NwYWNlXTogVG9nZ2xlIHNlbGVjdGlvblxuICAgIFthLGIsY10vZGVsZXRlOiBGaWx0ZXIgY2hvaWNlc1xuICAgIGVudGVyL3JldHVybjogQ29tcGxldGUgYW5zd2VyXG5gO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlckN1cnJlbnRJbnB1dCgpIHtcbiAgICByZXR1cm4gYFxuRmlsdGVyZWQgcmVzdWx0cyBmb3I6ICR7dGhpcy5pbnB1dFZhbHVlID8gdGhpcy5pbnB1dFZhbHVlIDogY29sb3IuZ3JheSgnRW50ZXIgc29tZXRoaW5nIHRvIGZpbHRlcicpfVxcbmA7XG4gIH1cblxuICByZW5kZXJPcHRpb24oY3Vyc29yLCB2LCBpKSB7XG4gICAgbGV0IHRpdGxlO1xuICAgIGlmICh2LmRpc2FibGVkKSB0aXRsZSA9IGN1cnNvciA9PT0gaSA/IGNvbG9yLmdyYXkoKS51bmRlcmxpbmUodi50aXRsZSkgOiBjb2xvci5zdHJpa2V0aHJvdWdoKCkuZ3JheSh2LnRpdGxlKTtlbHNlIHRpdGxlID0gY3Vyc29yID09PSBpID8gY29sb3IuY3lhbigpLnVuZGVybGluZSh2LnRpdGxlKSA6IHYudGl0bGU7XG4gICAgcmV0dXJuICh2LnNlbGVjdGVkID8gY29sb3IuZ3JlZW4oZmlndXJlcy5yYWRpb09uKSA6IGZpZ3VyZXMucmFkaW9PZmYpICsgJyAgJyArIHRpdGxlO1xuICB9XG5cbiAgcmVuZGVyRG9uZU9ySW5zdHJ1Y3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpLm1hcCh2ID0+IHYudGl0bGUpLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gW2NvbG9yLmdyYXkodGhpcy5oaW50KSwgdGhpcy5yZW5kZXJJbnN0cnVjdGlvbnMoKSwgdGhpcy5yZW5kZXJDdXJyZW50SW5wdXQoKV07XG5cbiAgICBpZiAodGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoICYmIHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuY3Vyc29yXS5kaXNhYmxlZCkge1xuICAgICAgb3V0cHV0LnB1c2goY29sb3IueWVsbG93KHRoaXMud2FybikpO1xuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQuam9pbignICcpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7XG4gICAgc3VwZXIucmVuZGVyKCk7IC8vIHByaW50IHByb21wdFxuXG4gICAgbGV0IHByb21wdCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLCBjb2xvci5ib2xkKHRoaXMubXNnKSwgc3R5bGUuZGVsaW1pdGVyKGZhbHNlKSwgdGhpcy5yZW5kZXJEb25lT3JJbnN0cnVjdGlvbnMoKV0uam9pbignICcpO1xuXG4gICAgaWYgKHRoaXMuc2hvd01pbkVycm9yKSB7XG4gICAgICBwcm9tcHQgKz0gY29sb3IucmVkKGBZb3UgbXVzdCBzZWxlY3QgYSBtaW5pbXVtIG9mICR7dGhpcy5taW5TZWxlY3RlZH0gY2hvaWNlcy5gKTtcbiAgICAgIHRoaXMuc2hvd01pbkVycm9yID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJvbXB0ICs9IHRoaXMucmVuZGVyT3B0aW9ucyh0aGlzLmZpbHRlcmVkT3B0aW9ucyk7XG4gICAgdGhpcy5vdXQud3JpdGUodGhpcy5jbGVhciArIHByb21wdCk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKHByb21wdCwgdGhpcy5vdXQuY29sdW1ucyk7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEF1dG9jb21wbGV0ZU11bHRpc2VsZWN0UHJvbXB0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5cbmNvbnN0IFByb21wdCA9IHJlcXVpcmUoJy4vcHJvbXB0Jyk7XG5cbmNvbnN0IF9yZXF1aXJlID0gcmVxdWlyZSgnLi4vdXRpbCcpLFxuICAgICAgc3R5bGUgPSBfcmVxdWlyZS5zdHlsZSxcbiAgICAgIGNsZWFyID0gX3JlcXVpcmUuY2xlYXI7XG5cbmNvbnN0IF9yZXF1aXJlMiA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKSxcbiAgICAgIGVyYXNlID0gX3JlcXVpcmUyLmVyYXNlLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUyLmN1cnNvcjtcbi8qKlxuICogQ29uZmlybVByb21wdCBCYXNlIEVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLm1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5pbml0aWFsXSBEZWZhdWx0IHZhbHVlICh0cnVlL2ZhbHNlKVxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMueWVzXSBUaGUgXCJZZXNcIiBsYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnllc09wdGlvbl0gVGhlIFwiWWVzXCIgb3B0aW9uIHdoZW4gY2hvb3NpbmcgYmV0d2VlbiB5ZXMvbm9cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5ub10gVGhlIFwiTm9cIiBsYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm5vT3B0aW9uXSBUaGUgXCJOb1wiIG9wdGlvbiB3aGVuIGNob29zaW5nIGJldHdlZW4geWVzL25vXG4gKi9cblxuXG5jbGFzcyBDb25maXJtUHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy52YWx1ZSA9IG9wdHMuaW5pdGlhbDtcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9ICEhb3B0cy5pbml0aWFsO1xuICAgIHRoaXMueWVzTXNnID0gb3B0cy55ZXMgfHwgJ3llcyc7XG4gICAgdGhpcy55ZXNPcHRpb24gPSBvcHRzLnllc09wdGlvbiB8fCAnKFkvbiknO1xuICAgIHRoaXMubm9Nc2cgPSBvcHRzLm5vIHx8ICdubyc7XG4gICAgdGhpcy5ub09wdGlvbiA9IG9wdHMubm9PcHRpb24gfHwgJyh5L04pJztcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuaW5pdGlhbFZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuZG9uZSA9IHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlIHx8IGZhbHNlO1xuICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYy50b0xvd2VyQ2FzZSgpID09PSAneScpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0KCk7XG4gICAgfVxuXG4gICAgaWYgKGMudG9Mb3dlckNhc2UoKSA9PT0gJ24nKSB7XG4gICAgICB0aGlzLnZhbHVlID0gZmFsc2U7XG4gICAgICByZXR1cm4gdGhpcy5zdWJtaXQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtlbHNlIHRoaXMub3V0LndyaXRlKGNsZWFyKHRoaXMub3V0cHV0VGV4dCwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgIHN1cGVyLnJlbmRlcigpO1xuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLCBjb2xvci5ib2xkKHRoaXMubXNnKSwgc3R5bGUuZGVsaW1pdGVyKHRoaXMuZG9uZSksIHRoaXMuZG9uZSA/IHRoaXMudmFsdWUgPyB0aGlzLnllc01zZyA6IHRoaXMubm9Nc2cgOiBjb2xvci5ncmF5KHRoaXMuaW5pdGlhbFZhbHVlID8gdGhpcy55ZXNPcHRpb24gOiB0aGlzLm5vT3B0aW9uKV0uam9pbignICcpO1xuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb25maXJtUHJvbXB0OyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFRleHRQcm9tcHQ6IHJlcXVpcmUoJy4vdGV4dCcpLFxuICBTZWxlY3RQcm9tcHQ6IHJlcXVpcmUoJy4vc2VsZWN0JyksXG4gIFRvZ2dsZVByb21wdDogcmVxdWlyZSgnLi90b2dnbGUnKSxcbiAgRGF0ZVByb21wdDogcmVxdWlyZSgnLi9kYXRlJyksXG4gIE51bWJlclByb21wdDogcmVxdWlyZSgnLi9udW1iZXInKSxcbiAgTXVsdGlzZWxlY3RQcm9tcHQ6IHJlcXVpcmUoJy4vbXVsdGlzZWxlY3QnKSxcbiAgQXV0b2NvbXBsZXRlUHJvbXB0OiByZXF1aXJlKCcuL2F1dG9jb21wbGV0ZScpLFxuICBBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdDogcmVxdWlyZSgnLi9hdXRvY29tcGxldGVNdWx0aXNlbGVjdCcpLFxuICBDb25maXJtUHJvbXB0OiByZXF1aXJlKCcuL2NvbmZpcm0nKVxufTsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0ICQgPSBleHBvcnRzO1xuXG5jb25zdCBlbCA9IHJlcXVpcmUoJy4vZWxlbWVudHMnKTtcblxuY29uc3Qgbm9vcCA9IHYgPT4gdjtcblxuZnVuY3Rpb24gdG9Qcm9tcHQodHlwZSwgYXJncywgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICBjb25zdCBwID0gbmV3IGVsW3R5cGVdKGFyZ3MpO1xuICAgIGNvbnN0IG9uQWJvcnQgPSBvcHRzLm9uQWJvcnQgfHwgbm9vcDtcbiAgICBjb25zdCBvblN1Ym1pdCA9IG9wdHMub25TdWJtaXQgfHwgbm9vcDtcbiAgICBjb25zdCBvbkV4aXQgPSBvcHRzLm9uRXhpdCB8fCBub29wO1xuICAgIHAub24oJ3N0YXRlJywgYXJncy5vblN0YXRlIHx8IG5vb3ApO1xuICAgIHAub24oJ3N1Ym1pdCcsIHggPT4gcmVzKG9uU3VibWl0KHgpKSk7XG4gICAgcC5vbignZXhpdCcsIHggPT4gcmVzKG9uRXhpdCh4KSkpO1xuICAgIHAub24oJ2Fib3J0JywgeCA9PiByZWoob25BYm9ydCh4KSkpO1xuICB9KTtcbn1cbi8qKlxuICogVGV4dCBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmluaXRpYWxdIERlZmF1bHQgc3RyaW5nIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3R5bGU9XCJkZWZhdWx0XCJdIFJlbmRlciBzdHlsZSAoJ2RlZmF1bHQnLCAncGFzc3dvcmQnLCAnaW52aXNpYmxlJylcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cblxuXG4kLnRleHQgPSBhcmdzID0+IHRvUHJvbXB0KCdUZXh0UHJvbXB0JywgYXJncyk7XG4vKipcbiAqIFBhc3N3b3JkIHByb21wdCB3aXRoIG1hc2tlZCBpbnB1dFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cblxuXG4kLnBhc3N3b3JkID0gYXJncyA9PiB7XG4gIGFyZ3Muc3R5bGUgPSAncGFzc3dvcmQnO1xuICByZXR1cm4gJC50ZXh0KGFyZ3MpO1xufTtcbi8qKlxuICogUHJvbXB0IHdoZXJlIGlucHV0IGlzIGludmlzaWJsZSwgbGlrZSBzdWRvXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5pbml0aWFsXSBEZWZhdWx0IHN0cmluZyB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuXG5cbiQuaW52aXNpYmxlID0gYXJncyA9PiB7XG4gIGFyZ3Muc3R5bGUgPSAnaW52aXNpYmxlJztcbiAgcmV0dXJuICQudGV4dChhcmdzKTtcbn07XG4vKipcbiAqIE51bWJlciBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtudW1iZXJ9IGFyZ3MuaW5pdGlhbCBEZWZhdWx0IG51bWJlciB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MubWF4XSBNYXggdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5taW5dIE1pbiB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnN0eWxlPVwiZGVmYXVsdFwiXSBSZW5kZXIgc3R5bGUgKCdkZWZhdWx0JywgJ3Bhc3N3b3JkJywgJ2ludmlzaWJsZScpXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRzLmZsb2F0PWZhbHNlXSBQYXJzZSBpbnB1dCBhcyBmbG9hdHNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5yb3VuZD0yXSBSb3VuZCBmbG9hdHMgdG8geCBkZWNpbWFsc1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmluY3JlbWVudD0xXSBOdW1iZXIgdG8gaW5jcmVtZW50IGJ5IHdoZW4gdXNpbmcgYXJyb3cta2V5c1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cblxuXG4kLm51bWJlciA9IGFyZ3MgPT4gdG9Qcm9tcHQoJ051bWJlclByb21wdCcsIGFyZ3MpO1xuLyoqXG4gKiBEYXRlIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge251bWJlcn0gYXJncy5pbml0aWFsIERlZmF1bHQgbnVtYmVyIHZhbHVlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5tYXhdIE1heCB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1pbl0gTWluIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3R5bGU9XCJkZWZhdWx0XCJdIFJlbmRlciBzdHlsZSAoJ2RlZmF1bHQnLCAncGFzc3dvcmQnLCAnaW52aXNpYmxlJylcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuZmxvYXQ9ZmFsc2VdIFBhcnNlIGlucHV0IGFzIGZsb2F0c1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnJvdW5kPTJdIFJvdW5kIGZsb2F0cyB0byB4IGRlY2ltYWxzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5jcmVtZW50PTFdIE51bWJlciB0byBpbmNyZW1lbnQgYnkgd2hlbiB1c2luZyBhcnJvdy1rZXlzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuXG5cbiQuZGF0ZSA9IGFyZ3MgPT4gdG9Qcm9tcHQoJ0RhdGVQcm9tcHQnLCBhcmdzKTtcbi8qKlxuICogQ2xhc3NpYyB5ZXMvbm8gcHJvbXB0XG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FyZ3MuaW5pdGlhbD1mYWxzZV0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dFxuICovXG5cblxuJC5jb25maXJtID0gYXJncyA9PiB0b1Byb21wdCgnQ29uZmlybVByb21wdCcsIGFyZ3MpO1xuLyoqXG4gKiBMaXN0IHByb21wdCwgc3BsaXQgaW50cHV0IHN0cmluZyBieSBgc2VwZXJhdG9yYFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5zdHlsZT1cImRlZmF1bHRcIl0gUmVuZGVyIHN0eWxlICgnZGVmYXVsdCcsICdwYXNzd29yZCcsICdpbnZpc2libGUnKVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnNlcGFyYXRvcl0gU3RyaW5nIHNlcGFyYXRvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dCwgaW4gZm9ybSBvZiBhbiBgQXJyYXlgXG4gKi9cblxuXG4kLmxpc3QgPSBhcmdzID0+IHtcbiAgY29uc3Qgc2VwID0gYXJncy5zZXBhcmF0b3IgfHwgJywnO1xuICByZXR1cm4gdG9Qcm9tcHQoJ1RleHRQcm9tcHQnLCBhcmdzLCB7XG4gICAgb25TdWJtaXQ6IHN0ciA9PiBzdHIuc3BsaXQoc2VwKS5tYXAocyA9PiBzLnRyaW0oKSlcbiAgfSk7XG59O1xuLyoqXG4gKiBUb2dnbGUvc3dpdGNoIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmluaXRpYWw9ZmFsc2VdIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5hY3RpdmU9XCJvblwiXSBUZXh0IGZvciBgYWN0aXZlYCBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmluYWN0aXZlPVwib2ZmXCJdIFRleHQgZm9yIGBpbmFjdGl2ZWAgc3RhdGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuXG5cbiQudG9nZ2xlID0gYXJncyA9PiB0b1Byb21wdCgnVG9nZ2xlUHJvbXB0JywgYXJncyk7XG4vKipcbiAqIEludGVyYWN0aXZlIHNlbGVjdCBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtBcnJheX0gYXJncy5jaG9pY2VzIEFycmF5IG9mIGNob2ljZXMgb2JqZWN0cyBgW3sgdGl0bGUsIHZhbHVlIH0sIC4uLl1gXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MuaW5pdGlhbF0gSW5kZXggb2YgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFthcmdzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dFxuICovXG5cblxuJC5zZWxlY3QgPSBhcmdzID0+IHRvUHJvbXB0KCdTZWxlY3RQcm9tcHQnLCBhcmdzKTtcbi8qKlxuICogSW50ZXJhY3RpdmUgbXVsdGktc2VsZWN0IC8gYXV0b2NvbXBsZXRlTXVsdGlzZWxlY3QgcHJvbXB0XG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2VzIG9iamVjdHMgYFt7IHRpdGxlLCB2YWx1ZSwgW3NlbGVjdGVkXSB9LCAuLi5dYFxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1heF0gTWF4IHNlbGVjdFxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmhpbnRdIEhpbnQgdG8gZGlzcGxheSB1c2VyXG4gKiBAcGFyYW0ge051bWJlcn0gW2FyZ3MuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dFxuICovXG5cblxuJC5tdWx0aXNlbGVjdCA9IGFyZ3MgPT4ge1xuICBhcmdzLmNob2ljZXMgPSBbXS5jb25jYXQoYXJncy5jaG9pY2VzIHx8IFtdKTtcblxuICBjb25zdCB0b1NlbGVjdGVkID0gaXRlbXMgPT4gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zZWxlY3RlZCkubWFwKGl0ZW0gPT4gaXRlbS52YWx1ZSk7XG5cbiAgcmV0dXJuIHRvUHJvbXB0KCdNdWx0aXNlbGVjdFByb21wdCcsIGFyZ3MsIHtcbiAgICBvbkFib3J0OiB0b1NlbGVjdGVkLFxuICAgIG9uU3VibWl0OiB0b1NlbGVjdGVkXG4gIH0pO1xufTtcblxuJC5hdXRvY29tcGxldGVNdWx0aXNlbGVjdCA9IGFyZ3MgPT4ge1xuICBhcmdzLmNob2ljZXMgPSBbXS5jb25jYXQoYXJncy5jaG9pY2VzIHx8IFtdKTtcblxuICBjb25zdCB0b1NlbGVjdGVkID0gaXRlbXMgPT4gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zZWxlY3RlZCkubWFwKGl0ZW0gPT4gaXRlbS52YWx1ZSk7XG5cbiAgcmV0dXJuIHRvUHJvbXB0KCdBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdCcsIGFyZ3MsIHtcbiAgICBvbkFib3J0OiB0b1NlbGVjdGVkLFxuICAgIG9uU3VibWl0OiB0b1NlbGVjdGVkXG4gIH0pO1xufTtcblxuY29uc3QgYnlUaXRsZSA9IChpbnB1dCwgY2hvaWNlcykgPT4gUHJvbWlzZS5yZXNvbHZlKGNob2ljZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS50aXRsZS5zbGljZSgwLCBpbnB1dC5sZW5ndGgpLnRvTG93ZXJDYXNlKCkgPT09IGlucHV0LnRvTG93ZXJDYXNlKCkpKTtcbi8qKlxuICogSW50ZXJhY3RpdmUgYXV0by1jb21wbGV0ZSBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtBcnJheX0gYXJncy5jaG9pY2VzIEFycmF5IG9mIGF1dG8tY29tcGxldGUgY2hvaWNlcyBvYmplY3RzIGBbeyB0aXRsZSwgdmFsdWUgfSwgLi4uXWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFthcmdzLnN1Z2dlc3RdIEZ1bmN0aW9uIHRvIGZpbHRlciByZXN1bHRzIGJhc2VkIG9uIHVzZXIgaW5wdXQuIERlZmF1bHRzIHRvIHNvcnQgYnkgYHRpdGxlYFxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLmxpbWl0PTEwXSBNYXggbnVtYmVyIG9mIHJlc3VsdHMgdG8gc2hvd1xuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnN0eWxlPVwiZGVmYXVsdFwiXSBSZW5kZXIgc3R5bGUgKCdkZWZhdWx0JywgJ3Bhc3N3b3JkJywgJ2ludmlzaWJsZScpXG4gKiBAcGFyYW0ge1N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gSW5kZXggb2YgdGhlIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuY2xlYXJGaXJzdF0gVGhlIGZpcnN0IEVTQ0FQRSBrZXlwcmVzcyB3aWxsIGNsZWFyIHRoZSBpbnB1dFxuICogQHBhcmFtIHtTdHJpbmd9IFthcmdzLmZhbGxiYWNrXSBGYWxsYmFjayBtZXNzYWdlIC0gZGVmYXVsdHMgdG8gaW5pdGlhbCB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dFxuICovXG5cblxuJC5hdXRvY29tcGxldGUgPSBhcmdzID0+IHtcbiAgYXJncy5zdWdnZXN0ID0gYXJncy5zdWdnZXN0IHx8IGJ5VGl0bGU7XG4gIGFyZ3MuY2hvaWNlcyA9IFtdLmNvbmNhdChhcmdzLmNob2ljZXMgfHwgW10pO1xuICByZXR1cm4gdG9Qcm9tcHQoJ0F1dG9jb21wbGV0ZVByb21wdCcsIGFyZ3MpO1xufTsiLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIobywgYWxsb3dBcnJheUxpa2UpIHsgdmFyIGl0ID0gdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0gfHwgb1tcIkBAaXRlcmF0b3JcIl07IGlmICghaXQpIHsgaWYgKEFycmF5LmlzQXJyYXkobykgfHwgKGl0ID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8pKSB8fCBhbGxvd0FycmF5TGlrZSAmJiBvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgeyBpZiAoaXQpIG8gPSBpdDsgdmFyIGkgPSAwOyB2YXIgRiA9IGZ1bmN0aW9uIEYoKSB7fTsgcmV0dXJuIHsgczogRiwgbjogZnVuY3Rpb24gbigpIHsgaWYgKGkgPj0gby5sZW5ndGgpIHJldHVybiB7IGRvbmU6IHRydWUgfTsgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiBvW2krK10gfTsgfSwgZTogZnVuY3Rpb24gZShfZSkgeyB0aHJvdyBfZTsgfSwgZjogRiB9OyB9IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfSB2YXIgbm9ybWFsQ29tcGxldGlvbiA9IHRydWUsIGRpZEVyciA9IGZhbHNlLCBlcnI7IHJldHVybiB7IHM6IGZ1bmN0aW9uIHMoKSB7IGl0ID0gaXQuY2FsbChvKTsgfSwgbjogZnVuY3Rpb24gbigpIHsgdmFyIHN0ZXAgPSBpdC5uZXh0KCk7IG5vcm1hbENvbXBsZXRpb24gPSBzdGVwLmRvbmU7IHJldHVybiBzdGVwOyB9LCBlOiBmdW5jdGlvbiBlKF9lMikgeyBkaWRFcnIgPSB0cnVlOyBlcnIgPSBfZTI7IH0sIGY6IGZ1bmN0aW9uIGYoKSB7IHRyeSB7IGlmICghbm9ybWFsQ29tcGxldGlvbiAmJiBpdC5yZXR1cm4gIT0gbnVsbCkgaXQucmV0dXJuKCk7IH0gZmluYWxseSB7IGlmIChkaWRFcnIpIHRocm93IGVycjsgfSB9IH07IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbmNvbnN0IHByb21wdHMgPSByZXF1aXJlKCcuL3Byb21wdHMnKTtcblxuY29uc3QgcGFzc09uID0gWydzdWdnZXN0JywgJ2Zvcm1hdCcsICdvblN0YXRlJywgJ3ZhbGlkYXRlJywgJ29uUmVuZGVyJywgJ3R5cGUnXTtcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuLyoqXG4gKiBQcm9tcHQgZm9yIGEgc2VyaWVzIG9mIHF1ZXN0aW9uc1xuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IHF1ZXN0aW9ucyBTaW5nbGUgcXVlc3Rpb24gb2JqZWN0IG9yIEFycmF5IG9mIHF1ZXN0aW9uIG9iamVjdHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvblN1Ym1pdF0gQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIG9uIHByb21wdCBzdWJtaXRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvbkNhbmNlbF0gQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIG9uIGNhbmNlbC9hYm9ydFxuICogQHJldHVybnMge09iamVjdH0gT2JqZWN0IHdpdGggdmFsdWVzIGZyb20gdXNlciBpbnB1dFxuICovXG5cblxuZnVuY3Rpb24gcHJvbXB0KCkge1xuICByZXR1cm4gX3Byb21wdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBfcHJvbXB0KCkge1xuICBfcHJvbXB0ID0gX2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qIChxdWVzdGlvbnMgPSBbXSwge1xuICAgIG9uU3VibWl0ID0gbm9vcCxcbiAgICBvbkNhbmNlbCA9IG5vb3BcbiAgfSA9IHt9KSB7XG4gICAgY29uc3QgYW5zd2VycyA9IHt9O1xuICAgIGNvbnN0IG92ZXJyaWRlID0gcHJvbXB0Ll9vdmVycmlkZSB8fCB7fTtcbiAgICBxdWVzdGlvbnMgPSBbXS5jb25jYXQocXVlc3Rpb25zKTtcbiAgICBsZXQgYW5zd2VyLCBxdWVzdGlvbiwgcXVpdCwgbmFtZSwgdHlwZSwgbGFzdFByb21wdDtcblxuICAgIGNvbnN0IGdldEZvcm1hdHRlZEFuc3dlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3JlZiA9IF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAocXVlc3Rpb24sIGFuc3dlciwgc2tpcFZhbGlkYXRpb24gPSBmYWxzZSkge1xuICAgICAgICBpZiAoIXNraXBWYWxpZGF0aW9uICYmIHF1ZXN0aW9uLnZhbGlkYXRlICYmIHF1ZXN0aW9uLnZhbGlkYXRlKGFuc3dlcikgIT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcXVlc3Rpb24uZm9ybWF0ID8geWllbGQgcXVlc3Rpb24uZm9ybWF0KGFuc3dlciwgYW5zd2VycykgOiBhbnN3ZXI7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGdldEZvcm1hdHRlZEFuc3dlcihfeCwgX3gyKSB7XG4gICAgICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH0oKTtcblxuICAgIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihxdWVzdGlvbnMpLFxuICAgICAgICBfc3RlcDtcblxuICAgIHRyeSB7XG4gICAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgICBxdWVzdGlvbiA9IF9zdGVwLnZhbHVlO1xuICAgICAgICB2YXIgX3F1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgICAgIG5hbWUgPSBfcXVlc3Rpb24ubmFtZTtcbiAgICAgICAgdHlwZSA9IF9xdWVzdGlvbi50eXBlO1xuXG4gICAgICAgIC8vIGV2YWx1YXRlIHR5cGUgZmlyc3QgYW5kIHNraXAgaWYgdHlwZSBpcyBhIGZhbHN5IHZhbHVlXG4gICAgICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHR5cGUgPSB5aWVsZCB0eXBlKGFuc3dlciwgX29iamVjdFNwcmVhZCh7fSwgYW5zd2VycyksIHF1ZXN0aW9uKTtcbiAgICAgICAgICBxdWVzdGlvblsndHlwZSddID0gdHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdHlwZSkgY29udGludWU7IC8vIGlmIHByb3BlcnR5IGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCB1bmxlc3MgaXQncyBhIHNwZWNpYWwgZnVuY3Rpb25cblxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gcXVlc3Rpb24pIHtcbiAgICAgICAgICBpZiAocGFzc09uLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgICAgIGxldCB2YWx1ZSA9IHF1ZXN0aW9uW2tleV07XG4gICAgICAgICAgcXVlc3Rpb25ba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHlpZWxkIHZhbHVlKGFuc3dlciwgX29iamVjdFNwcmVhZCh7fSwgYW5zd2VycyksIGxhc3RQcm9tcHQpIDogdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UHJvbXB0ID0gcXVlc3Rpb247XG5cbiAgICAgICAgaWYgKHR5cGVvZiBxdWVzdGlvbi5tZXNzYWdlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncHJvbXB0IG1lc3NhZ2UgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgfSAvLyB1cGRhdGUgdmFycyBpbiBjYXNlIHRoZXkgY2hhbmdlZFxuXG5cbiAgICAgICAgdmFyIF9xdWVzdGlvbjIgPSBxdWVzdGlvbjtcbiAgICAgICAgbmFtZSA9IF9xdWVzdGlvbjIubmFtZTtcbiAgICAgICAgdHlwZSA9IF9xdWVzdGlvbjIudHlwZTtcblxuICAgICAgICBpZiAocHJvbXB0c1t0eXBlXSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcm9tcHQgdHlwZSAoJHt0eXBlfSkgaXMgbm90IGRlZmluZWRgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvdmVycmlkZVtxdWVzdGlvbi5uYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYW5zd2VyID0geWllbGQgZ2V0Rm9ybWF0dGVkQW5zd2VyKHF1ZXN0aW9uLCBvdmVycmlkZVtxdWVzdGlvbi5uYW1lXSk7XG5cbiAgICAgICAgICBpZiAoYW5zd2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFuc3dlcnNbbmFtZV0gPSBhbnN3ZXI7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEdldCB0aGUgaW5qZWN0ZWQgYW5zd2VyIGlmIHRoZXJlIGlzIG9uZSBvciBwcm9tcHQgdGhlIHVzZXJcbiAgICAgICAgICBhbnN3ZXIgPSBwcm9tcHQuX2luamVjdGVkID8gZ2V0SW5qZWN0ZWRBbnN3ZXIocHJvbXB0Ll9pbmplY3RlZCwgcXVlc3Rpb24uaW5pdGlhbCkgOiB5aWVsZCBwcm9tcHRzW3R5cGVdKHF1ZXN0aW9uKTtcbiAgICAgICAgICBhbnN3ZXJzW25hbWVdID0gYW5zd2VyID0geWllbGQgZ2V0Rm9ybWF0dGVkQW5zd2VyKHF1ZXN0aW9uLCBhbnN3ZXIsIHRydWUpO1xuICAgICAgICAgIHF1aXQgPSB5aWVsZCBvblN1Ym1pdChxdWVzdGlvbiwgYW5zd2VyLCBhbnN3ZXJzKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcXVpdCA9ICEoeWllbGQgb25DYW5jZWwocXVlc3Rpb24sIGFuc3dlcnMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChxdWl0KSByZXR1cm4gYW5zd2VycztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIF9pdGVyYXRvci5lKGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIF9pdGVyYXRvci5mKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuc3dlcnM7XG4gIH0pO1xuICByZXR1cm4gX3Byb21wdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBnZXRJbmplY3RlZEFuc3dlcihpbmplY3RlZCwgZGVhZnVsdFZhbHVlKSB7XG4gIGNvbnN0IGFuc3dlciA9IGluamVjdGVkLnNoaWZ0KCk7XG5cbiAgaWYgKGFuc3dlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgdGhyb3cgYW5zd2VyO1xuICB9XG5cbiAgcmV0dXJuIGFuc3dlciA9PT0gdW5kZWZpbmVkID8gZGVhZnVsdFZhbHVlIDogYW5zd2VyO1xufVxuXG5mdW5jdGlvbiBpbmplY3QoYW5zd2Vycykge1xuICBwcm9tcHQuX2luamVjdGVkID0gKHByb21wdC5faW5qZWN0ZWQgfHwgW10pLmNvbmNhdChhbnN3ZXJzKTtcbn1cblxuZnVuY3Rpb24gb3ZlcnJpZGUoYW5zd2Vycykge1xuICBwcm9tcHQuX292ZXJyaWRlID0gT2JqZWN0LmFzc2lnbih7fSwgYW5zd2Vycyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbihwcm9tcHQsIHtcbiAgcHJvbXB0LFxuICBwcm9tcHRzLFxuICBpbmplY3QsXG4gIG92ZXJyaWRlXG59KTsiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gKGtleSwgaXNTZWxlY3QpID0+IHtcbiAgaWYgKGtleS5tZXRhICYmIGtleS5uYW1lICE9PSAnZXNjYXBlJykgcmV0dXJuO1xuICBcbiAgaWYgKGtleS5jdHJsKSB7XG4gICAgaWYgKGtleS5uYW1lID09PSAnYScpIHJldHVybiAnZmlyc3QnO1xuICAgIGlmIChrZXkubmFtZSA9PT0gJ2MnKSByZXR1cm4gJ2Fib3J0JztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdkJykgcmV0dXJuICdhYm9ydCc7XG4gICAgaWYgKGtleS5uYW1lID09PSAnZScpIHJldHVybiAnbGFzdCc7XG4gICAgaWYgKGtleS5uYW1lID09PSAnZycpIHJldHVybiAncmVzZXQnO1xuICB9XG4gIFxuICBpZiAoaXNTZWxlY3QpIHtcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdqJykgcmV0dXJuICdkb3duJztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdrJykgcmV0dXJuICd1cCc7XG4gIH1cblxuICBpZiAoa2V5Lm5hbWUgPT09ICdyZXR1cm4nKSByZXR1cm4gJ3N1Ym1pdCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2VudGVyJykgcmV0dXJuICdzdWJtaXQnOyAvLyBjdHJsICsgSlxuICBpZiAoa2V5Lm5hbWUgPT09ICdiYWNrc3BhY2UnKSByZXR1cm4gJ2RlbGV0ZSc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2RlbGV0ZScpIHJldHVybiAnZGVsZXRlRm9yd2FyZCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2Fib3J0JykgcmV0dXJuICdhYm9ydCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2VzY2FwZScpIHJldHVybiAnZXhpdCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ3RhYicpIHJldHVybiAnbmV4dCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ3BhZ2Vkb3duJykgcmV0dXJuICduZXh0UGFnZSc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ3BhZ2V1cCcpIHJldHVybiAncHJldlBhZ2UnO1xuICAvLyBUT0RPIGNyZWF0ZSBob21lKCkgaW4gcHJvbXB0IHR5cGVzIChlLmcuIFRleHRQcm9tcHQpXG4gIGlmIChrZXkubmFtZSA9PT0gJ2hvbWUnKSByZXR1cm4gJ2hvbWUnO1xuICAvLyBUT0RPIGNyZWF0ZSBlbmQoKSBpbiBwcm9tcHQgdHlwZXMgKGUuZy4gVGV4dFByb21wdClcbiAgaWYgKGtleS5uYW1lID09PSAnZW5kJykgcmV0dXJuICdlbmQnO1xuXG4gIGlmIChrZXkubmFtZSA9PT0gJ3VwJykgcmV0dXJuICd1cCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2Rvd24nKSByZXR1cm4gJ2Rvd24nO1xuICBpZiAoa2V5Lm5hbWUgPT09ICdyaWdodCcpIHJldHVybiAncmlnaHQnO1xuICBpZiAoa2V5Lm5hbWUgPT09ICdsZWZ0JykgcmV0dXJuICdsZWZ0JztcblxuICByZXR1cm4gZmFsc2U7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0ciA9PiB7XG4gIGNvbnN0IHBhdHRlcm4gPSBbXG4gICAgJ1tcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNyknLFxuICAgICcoPzooPzpcXFxcZHsxLDR9KD86O1xcXFxkezAsNH0pKik/W1xcXFxkQS1QUlpjZi1udHFyeT0+PH5dKSknXG4gIF0uam9pbignfCcpO1xuXG4gIGNvbnN0IFJHWCA9IG5ldyBSZWdFeHAocGF0dGVybiwgJ2cnKTtcbiAgcmV0dXJuIHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnID8gc3RyLnJlcGxhY2UoUkdYLCAnJykgOiBzdHI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBzdHJpcCA9IHJlcXVpcmUoJy4vc3RyaXAnKTtcbmNvbnN0IHsgZXJhc2UsIGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuXG5jb25zdCB3aWR0aCA9IHN0ciA9PiBbLi4uc3RyaXAoc3RyKV0ubGVuZ3RoO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9tcHRcbiAqIEBwYXJhbSB7bnVtYmVyfSBwZXJMaW5lXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ocHJvbXB0LCBwZXJMaW5lKSB7XG4gIGlmICghcGVyTGluZSkgcmV0dXJuIGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCk7XG5cbiAgbGV0IHJvd3MgPSAwO1xuICBjb25zdCBsaW5lcyA9IHByb21wdC5zcGxpdCgvXFxyP1xcbi8pO1xuICBmb3IgKGxldCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgcm93cyArPSAxICsgTWF0aC5mbG9vcihNYXRoLm1heCh3aWR0aChsaW5lKSAtIDEsIDApIC8gcGVyTGluZSk7XG4gIH1cblxuICByZXR1cm4gZXJhc2UubGluZXMocm93cyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1x0XG5cbiBjb25zdCBtYWluID0ge1xuICBhcnJvd1VwOiAn4oaRJyxcbiAgYXJyb3dEb3duOiAn4oaTJyxcbiAgYXJyb3dMZWZ0OiAn4oaQJyxcbiAgYXJyb3dSaWdodDogJ+KGkicsXG4gIHJhZGlvT246ICfil4knLFxuICByYWRpb09mZjogJ+KXrycsXG4gIHRpY2s6ICfinJQnLFx0XG4gIGNyb3NzOiAn4pyWJyxcdFxuICBlbGxpcHNpczogJ+KApicsXHRcbiAgcG9pbnRlclNtYWxsOiAn4oC6JyxcdFxuICBsaW5lOiAn4pSAJyxcdFxuICBwb2ludGVyOiAn4p2vJ1x0XG59O1x0XG5jb25zdCB3aW4gPSB7XG4gIGFycm93VXA6IG1haW4uYXJyb3dVcCxcbiAgYXJyb3dEb3duOiBtYWluLmFycm93RG93bixcbiAgYXJyb3dMZWZ0OiBtYWluLmFycm93TGVmdCxcbiAgYXJyb3dSaWdodDogbWFpbi5hcnJvd1JpZ2h0LFxuICByYWRpb09uOiAnKCopJyxcbiAgcmFkaW9PZmY6ICcoICknLFx0XG4gIHRpY2s6ICfiiJonLFx0XG4gIGNyb3NzOiAnw5cnLFx0XG4gIGVsbGlwc2lzOiAnLi4uJyxcdFxuICBwb2ludGVyU21hbGw6ICfCuycsXHRcbiAgbGluZTogJ+KUgCcsXHRcbiAgcG9pbnRlcjogJz4nXHRcbn07XHRcbmNvbnN0IGZpZ3VyZXMgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gd2luIDogbWFpbjtcdFxuXG4gbW9kdWxlLmV4cG9ydHMgPSBmaWd1cmVzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjID0gcmVxdWlyZSgna2xldXInKTtcbmNvbnN0IGZpZ3VyZXMgPSByZXF1aXJlKCcuL2ZpZ3VyZXMnKTtcblxuLy8gcmVuZGVyaW5nIHVzZXIgaW5wdXQuXG5jb25zdCBzdHlsZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgcGFzc3dvcmQ6IHsgc2NhbGU6IDEsIHJlbmRlcjogaW5wdXQgPT4gJyonLnJlcGVhdChpbnB1dC5sZW5ndGgpIH0sXG4gIGVtb2ppOiB7IHNjYWxlOiAyLCByZW5kZXI6IGlucHV0ID0+ICfwn5iDJy5yZXBlYXQoaW5wdXQubGVuZ3RoKSB9LFxuICBpbnZpc2libGU6IHsgc2NhbGU6IDAsIHJlbmRlcjogaW5wdXQgPT4gJycgfSxcbiAgZGVmYXVsdDogeyBzY2FsZTogMSwgcmVuZGVyOiBpbnB1dCA9PiBgJHtpbnB1dH1gIH1cbn0pO1xuY29uc3QgcmVuZGVyID0gdHlwZSA9PiBzdHlsZXNbdHlwZV0gfHwgc3R5bGVzLmRlZmF1bHQ7XG5cbi8vIGljb24gdG8gc2lnbmFsaXplIGEgcHJvbXB0LlxuY29uc3Qgc3ltYm9scyA9IE9iamVjdC5mcmVlemUoe1xuICBhYm9ydGVkOiBjLnJlZChmaWd1cmVzLmNyb3NzKSxcbiAgZG9uZTogYy5ncmVlbihmaWd1cmVzLnRpY2spLFxuICBleGl0ZWQ6IGMueWVsbG93KGZpZ3VyZXMuY3Jvc3MpLFxuICBkZWZhdWx0OiBjLmN5YW4oJz8nKVxufSk7XG5cbmNvbnN0IHN5bWJvbCA9IChkb25lLCBhYm9ydGVkLCBleGl0ZWQpID0+XG4gIGFib3J0ZWQgPyBzeW1ib2xzLmFib3J0ZWQgOiBleGl0ZWQgPyBzeW1ib2xzLmV4aXRlZCA6IGRvbmUgPyBzeW1ib2xzLmRvbmUgOiBzeW1ib2xzLmRlZmF1bHQ7XG5cbi8vIGJldHdlZW4gdGhlIHF1ZXN0aW9uIGFuZCB0aGUgdXNlcidzIGlucHV0LlxuY29uc3QgZGVsaW1pdGVyID0gY29tcGxldGluZyA9PlxuICBjLmdyYXkoY29tcGxldGluZyA/IGZpZ3VyZXMuZWxsaXBzaXMgOiBmaWd1cmVzLnBvaW50ZXJTbWFsbCk7XG5cbmNvbnN0IGl0ZW0gPSAoZXhwYW5kYWJsZSwgZXhwYW5kZWQpID0+XG4gIGMuZ3JheShleHBhbmRhYmxlID8gKGV4cGFuZGVkID8gZmlndXJlcy5wb2ludGVyU21hbGwgOiAnKycpIDogZmlndXJlcy5saW5lKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0eWxlcyxcbiAgcmVuZGVyLFxuICBzeW1ib2xzLFxuICBzeW1ib2wsXG4gIGRlbGltaXRlcixcbiAgaXRlbVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3Qgc3RyaXAgPSByZXF1aXJlKCcuL3N0cmlwJyk7XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1zZ1xuICogQHBhcmFtIHtudW1iZXJ9IHBlckxpbmVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobXNnLCBwZXJMaW5lKSB7XG4gIGxldCBsaW5lcyA9IFN0cmluZyhzdHJpcChtc2cpIHx8ICcnKS5zcGxpdCgvXFxyP1xcbi8pO1xuXG4gIGlmICghcGVyTGluZSkgcmV0dXJuIGxpbmVzLmxlbmd0aDtcbiAgcmV0dXJuIGxpbmVzLm1hcChsID0+IE1hdGguY2VpbChsLmxlbmd0aCAvIHBlckxpbmUpKVxuICAgICAgLnJlZHVjZSgoYSwgYikgPT4gYSArIGIpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbXNnIFRoZSBtZXNzYWdlIHRvIHdyYXBcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRzXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IFtvcHRzLm1hcmdpbl0gTGVmdCBtYXJnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLndpZHRoIE1heGltdW0gY2hhcmFjdGVycyBwZXIgbGluZSBpbmNsdWRpbmcgdGhlIG1hcmdpblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IChtc2csIG9wdHMgPSB7fSkgPT4ge1xuICBjb25zdCB0YWIgPSBOdW1iZXIuaXNTYWZlSW50ZWdlcihwYXJzZUludChvcHRzLm1hcmdpbikpXG4gICAgPyBuZXcgQXJyYXkocGFyc2VJbnQob3B0cy5tYXJnaW4pKS5maWxsKCcgJykuam9pbignJylcbiAgICA6IChvcHRzLm1hcmdpbiB8fCAnJyk7XG5cbiAgY29uc3Qgd2lkdGggPSBvcHRzLndpZHRoO1xuXG4gIHJldHVybiAobXNnIHx8ICcnKS5zcGxpdCgvXFxyP1xcbi9nKVxuICAgIC5tYXAobGluZSA9PiBsaW5lXG4gICAgICAuc3BsaXQoL1xccysvZylcbiAgICAgIC5yZWR1Y2UoKGFyciwgdykgPT4ge1xuICAgICAgICBpZiAody5sZW5ndGggKyB0YWIubGVuZ3RoID49IHdpZHRoIHx8IGFyclthcnIubGVuZ3RoIC0gMV0ubGVuZ3RoICsgdy5sZW5ndGggKyAxIDwgd2lkdGgpXG4gICAgICAgICAgYXJyW2Fyci5sZW5ndGggLSAxXSArPSBgICR7d31gO1xuICAgICAgICBlbHNlIGFyci5wdXNoKGAke3RhYn0ke3d9YCk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgICB9LCBbIHRhYiBdKVxuICAgICAgLmpvaW4oJ1xcbicpKVxuICAgIC5qb2luKCdcXG4nKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoYXQgZW50cmllcyBzaG91bGQgYmUgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW4sIGJhc2VkIG9uIHRoZVxuICogY3VycmVudGx5IHNlbGVjdGVkIGluZGV4IGFuZCB0aGUgbWF4aW11bSB2aXNpYmxlLiBVc2VkIGluIGxpc3QtYmFzZWRcbiAqIHByb21wdHMgbGlrZSBgc2VsZWN0YCBhbmQgYG11bHRpc2VsZWN0YC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gY3Vyc29yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZW50cnlcbiAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbCB0aGUgdG90YWwgZW50cmllcyBhdmFpbGFibGUgdG8gZGlzcGxheVxuICogQHBhcmFtIHtudW1iZXJ9IFttYXhWaXNpYmxlXSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhhdCBjYW4gYmUgZGlzcGxheWVkXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gKGN1cnNvciwgdG90YWwsIG1heFZpc2libGUpICA9PiB7XG4gIG1heFZpc2libGUgPSBtYXhWaXNpYmxlIHx8IHRvdGFsO1xuXG4gIGxldCBzdGFydEluZGV4ID0gTWF0aC5taW4odG90YWwtIG1heFZpc2libGUsIGN1cnNvciAtIE1hdGguZmxvb3IobWF4VmlzaWJsZSAvIDIpKTtcbiAgaWYgKHN0YXJ0SW5kZXggPCAwKSBzdGFydEluZGV4ID0gMDtcblxuICBsZXQgZW5kSW5kZXggPSBNYXRoLm1pbihzdGFydEluZGV4ICsgbWF4VmlzaWJsZSwgdG90YWwpO1xuXG4gIHJldHVybiB7IHN0YXJ0SW5kZXgsIGVuZEluZGV4IH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWN0aW9uOiByZXF1aXJlKCcuL2FjdGlvbicpLFxuICBjbGVhcjogcmVxdWlyZSgnLi9jbGVhcicpLFxuICBzdHlsZTogcmVxdWlyZSgnLi9zdHlsZScpLFxuICBzdHJpcDogcmVxdWlyZSgnLi9zdHJpcCcpLFxuICBmaWd1cmVzOiByZXF1aXJlKCcuL2ZpZ3VyZXMnKSxcbiAgbGluZXM6IHJlcXVpcmUoJy4vbGluZXMnKSxcbiAgd3JhcDogcmVxdWlyZSgnLi93cmFwJyksXG4gIGVudHJpZXNUb0Rpc3BsYXk6IHJlcXVpcmUoJy4vZW50cmllc1RvRGlzcGxheScpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCByZWFkbGluZSA9IHJlcXVpcmUoJ3JlYWRsaW5lJyk7XG5jb25zdCB7IGFjdGlvbiB9ID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJyk7XG5jb25zdCB7IGJlZXAsIGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuXG4vKipcbiAqIEJhc2UgcHJvbXB0IHNrZWxldG9uXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqL1xuY2xhc3MgUHJvbXB0IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmZpcnN0UmVuZGVyID0gdHJ1ZTtcbiAgICB0aGlzLmluID0gb3B0cy5zdGRpbiB8fCBwcm9jZXNzLnN0ZGluO1xuICAgIHRoaXMub3V0ID0gb3B0cy5zdGRvdXQgfHwgcHJvY2Vzcy5zdGRvdXQ7XG4gICAgdGhpcy5vblJlbmRlciA9IChvcHRzLm9uUmVuZGVyIHx8ICgoKSA9PiB2b2lkIDApKS5iaW5kKHRoaXMpO1xuICAgIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHsgaW5wdXQ6dGhpcy5pbiwgZXNjYXBlQ29kZVRpbWVvdXQ6NTAgfSk7XG4gICAgcmVhZGxpbmUuZW1pdEtleXByZXNzRXZlbnRzKHRoaXMuaW4sIHJsKTtcblxuICAgIGlmICh0aGlzLmluLmlzVFRZKSB0aGlzLmluLnNldFJhd01vZGUodHJ1ZSk7XG4gICAgY29uc3QgaXNTZWxlY3QgPSBbICdTZWxlY3RQcm9tcHQnLCAnTXVsdGlzZWxlY3RQcm9tcHQnIF0uaW5kZXhPZih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpID4gLTE7XG4gICAgY29uc3Qga2V5cHJlc3MgPSAoc3RyLCBrZXkpID0+IHtcbiAgICAgIGxldCBhID0gYWN0aW9uKGtleSwgaXNTZWxlY3QpO1xuICAgICAgaWYgKGEgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuXyAmJiB0aGlzLl8oc3RyLCBrZXkpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpc1thXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzW2FdKGtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJlbGwoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5jbG9zZSA9ICgpID0+IHtcbiAgICAgIHRoaXMub3V0LndyaXRlKGN1cnNvci5zaG93KTtcbiAgICAgIHRoaXMuaW4ucmVtb3ZlTGlzdGVuZXIoJ2tleXByZXNzJywga2V5cHJlc3MpO1xuICAgICAgaWYgKHRoaXMuaW4uaXNUVFkpIHRoaXMuaW4uc2V0UmF3TW9kZShmYWxzZSk7XG4gICAgICBybC5jbG9zZSgpO1xuICAgICAgdGhpcy5lbWl0KHRoaXMuYWJvcnRlZCA/ICdhYm9ydCcgOiB0aGlzLmV4aXRlZCA/ICdleGl0JyA6ICdzdWJtaXQnLCB0aGlzLnZhbHVlKTtcbiAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgdGhpcy5pbi5vbigna2V5cHJlc3MnLCBrZXlwcmVzcyk7XG4gIH1cblxuICBmaXJlKCkge1xuICAgIHRoaXMuZW1pdCgnc3RhdGUnLCB7XG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIGFib3J0ZWQ6ICEhdGhpcy5hYm9ydGVkLFxuICAgICAgZXhpdGVkOiAhIXRoaXMuZXhpdGVkXG4gICAgfSk7XG4gIH1cblxuICBiZWxsKCkge1xuICAgIHRoaXMub3V0LndyaXRlKGJlZXApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMub25SZW5kZXIoY29sb3IpO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLmZpcnN0UmVuZGVyID0gZmFsc2U7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQcm9tcHQ7XG4iLCJjb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5jb25zdCBQcm9tcHQgPSByZXF1aXJlKCcuL3Byb21wdCcpO1xuY29uc3QgeyBlcmFzZSwgY3Vyc29yIH0gPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyk7XG5jb25zdCB7IHN0eWxlLCBjbGVhciwgbGluZXMsIGZpZ3VyZXMgfSA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcblxuLyoqXG4gKiBUZXh0UHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuc3R5bGU9J2RlZmF1bHQnXSBSZW5kZXIgc3R5bGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbml0aWFsXSBEZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy52YWxpZGF0ZV0gVmFsaWRhdGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmVycm9yXSBUaGUgaW52YWxpZCBlcnJvciBsYWJlbFxuICovXG5jbGFzcyBUZXh0UHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMudHJhbnNmb3JtID0gc3R5bGUucmVuZGVyKG9wdHMuc3R5bGUpO1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmluaXRpYWwgPSBvcHRzLmluaXRpYWwgfHwgYGA7XG4gICAgdGhpcy52YWxpZGF0b3IgPSBvcHRzLnZhbGlkYXRlIHx8ICgoKSA9PiB0cnVlKTtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5lcnJvck1zZyA9IG9wdHMuZXJyb3IgfHwgYFBsZWFzZSBFbnRlciBBIFZhbGlkIFZhbHVlYDtcbiAgICB0aGlzLmN1cnNvciA9IE51bWJlcighIXRoaXMuaW5pdGlhbCk7XG4gICAgdGhpcy5jdXJzb3JPZmZzZXQgPSAwO1xuICAgIHRoaXMuY2xlYXIgPSBjbGVhcihgYCwgdGhpcy5vdXQuY29sdW1ucyk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2KSB7XG4gICAgaWYgKCF2ICYmIHRoaXMuaW5pdGlhbCkge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlcmVkID0gY29sb3IuZ3JheSh0aGlzLnRyYW5zZm9ybS5yZW5kZXIodGhpcy5pbml0aWFsKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVuZGVyZWQgPSB0aGlzLnRyYW5zZm9ybS5yZW5kZXIodik7XG4gICAgfVxuICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICB0aGlzLmZpcmUoKTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5jdXJzb3IgPSBOdW1iZXIoISF0aGlzLmluaXRpYWwpO1xuICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZSB8fCB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZSgpIHtcbiAgICBsZXQgdmFsaWQgPSBhd2FpdCB0aGlzLnZhbGlkYXRvcih0aGlzLnZhbHVlKTtcbiAgICBpZiAodHlwZW9mIHZhbGlkID09PSBgc3RyaW5nYCkge1xuICAgICAgdGhpcy5lcnJvck1zZyA9IHZhbGlkO1xuICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5lcnJvciA9ICF2YWxpZDtcbiAgfVxuXG4gIGFzeW5jIHN1Ym1pdCgpIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZSB8fCB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5jdXJzb3JPZmZzZXQgPSAwO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5yZW5kZXJlZC5sZW5ndGg7XG4gICAgYXdhaXQgdGhpcy52YWxpZGF0ZSgpO1xuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aGlzLnJlZCA9IHRydWU7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICBpZiAoIXRoaXMucGxhY2Vob2xkZXIpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5pbml0aWFsO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5yZW5kZXJlZC5sZW5ndGg7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKSByZXR1cm47XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmN1cnNvcituO1xuICAgIHRoaXMuY3Vyc29yT2Zmc2V0ICs9IG47XG4gIH1cblxuICBfKGMsIGtleSkge1xuICAgIGxldCBzMSA9IHRoaXMudmFsdWUuc2xpY2UoMCwgdGhpcy5jdXJzb3IpO1xuICAgIGxldCBzMiA9IHRoaXMudmFsdWUuc2xpY2UodGhpcy5jdXJzb3IpO1xuICAgIHRoaXMudmFsdWUgPSBgJHtzMX0ke2N9JHtzMn1gO1xuICAgIHRoaXMucmVkID0gZmFsc2U7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLnBsYWNlaG9sZGVyID8gMCA6IHMxLmxlbmd0aCsxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgaWYgKHRoaXMuaXNDdXJzb3JBdFN0YXJ0KCkpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICBsZXQgczEgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIHRoaXMuY3Vyc29yLTEpO1xuICAgIGxldCBzMiA9IHRoaXMudmFsdWUuc2xpY2UodGhpcy5jdXJzb3IpO1xuICAgIHRoaXMudmFsdWUgPSBgJHtzMX0ke3MyfWA7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5pc0N1cnNvckF0U3RhcnQoKSkge1xuICAgICAgdGhpcy5jdXJzb3JPZmZzZXQgPSAwXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3Vyc29yT2Zmc2V0Kys7XG4gICAgICB0aGlzLm1vdmVDdXJzb3IoLTEpO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlRm9yd2FyZCgpIHtcbiAgICBpZih0aGlzLmN1cnNvcip0aGlzLnNjYWxlID49IHRoaXMucmVuZGVyZWQubGVuZ3RoIHx8IHRoaXMucGxhY2Vob2xkZXIpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICBsZXQgczEgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIHRoaXMuY3Vyc29yKTtcbiAgICBsZXQgczIgPSB0aGlzLnZhbHVlLnNsaWNlKHRoaXMuY3Vyc29yKzEpO1xuICAgIHRoaXMudmFsdWUgPSBgJHtzMX0ke3MyfWA7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5pc0N1cnNvckF0RW5kKCkpIHtcbiAgICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJzb3JPZmZzZXQrKztcbiAgICB9XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGZpcnN0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gMDtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbGFzdCgpIHtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMudmFsdWUubGVuZ3RoO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA8PSAwIHx8IHRoaXMucGxhY2Vob2xkZXIpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLm1vdmVDdXJzb3IoLTEpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByaWdodCgpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IqdGhpcy5zY2FsZSA+PSB0aGlzLnJlbmRlcmVkLmxlbmd0aCB8fCB0aGlzLnBsYWNlaG9sZGVyKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy5tb3ZlQ3Vyc29yKDEpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBpc0N1cnNvckF0U3RhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3Vyc29yID09PSAwIHx8ICh0aGlzLnBsYWNlaG9sZGVyICYmIHRoaXMuY3Vyc29yID09PSAxKTtcbiAgfVxuXG4gIGlzQ3Vyc29yQXRFbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3Vyc29yID09PSB0aGlzLnJlbmRlcmVkLmxlbmd0aCB8fCAodGhpcy5wbGFjZWhvbGRlciAmJiB0aGlzLmN1cnNvciA9PT0gdGhpcy5yZW5kZXJlZC5sZW5ndGggKyAxKVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5maXJzdFJlbmRlcikge1xuICAgICAgaWYgKHRoaXMub3V0cHV0RXJyb3IpXG4gICAgICAgIHRoaXMub3V0LndyaXRlKGN1cnNvci5kb3duKGxpbmVzKHRoaXMub3V0cHV0RXJyb3IsIHRoaXMub3V0LmNvbHVtbnMpIC0gMSkgKyBjbGVhcih0aGlzLm91dHB1dEVycm9yLCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgICB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICB9XG4gICAgc3VwZXIucmVuZGVyKCk7XG4gICAgdGhpcy5vdXRwdXRFcnJvciA9ICcnO1xuXG4gICAgdGhpcy5vdXRwdXRUZXh0ID0gW1xuICAgICAgc3R5bGUuc3ltYm9sKHRoaXMuZG9uZSwgdGhpcy5hYm9ydGVkKSxcbiAgICAgIGNvbG9yLmJvbGQodGhpcy5tc2cpLFxuICAgICAgc3R5bGUuZGVsaW1pdGVyKHRoaXMuZG9uZSksXG4gICAgICB0aGlzLnJlZCA/IGNvbG9yLnJlZCh0aGlzLnJlbmRlcmVkKSA6IHRoaXMucmVuZGVyZWRcbiAgICBdLmpvaW4oYCBgKTtcblxuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aGlzLm91dHB1dEVycm9yICs9IHRoaXMuZXJyb3JNc2cuc3BsaXQoYFxcbmApXG4gICAgICAgICAgLnJlZHVjZSgoYSwgbCwgaSkgPT4gYSArIGBcXG4ke2kgPyAnICcgOiBmaWd1cmVzLnBvaW50ZXJTbWFsbH0gJHtjb2xvci5yZWQoKS5pdGFsaWMobCl9YCwgYGApO1xuICAgIH1cblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQgKyBjdXJzb3Iuc2F2ZSArIHRoaXMub3V0cHV0RXJyb3IgKyBjdXJzb3IucmVzdG9yZSArIGN1cnNvci5tb3ZlKHRoaXMuY3Vyc29yT2Zmc2V0LCAwKSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0UHJvbXB0OyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcbmNvbnN0IHsgc3R5bGUsIGNsZWFyLCBmaWd1cmVzLCB3cmFwLCBlbnRyaWVzVG9EaXNwbGF5IH0gPSByZXF1aXJlKCcuLi91dGlsJyk7XG5jb25zdCB7IGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuXG4vKipcbiAqIFNlbGVjdFByb21wdCBCYXNlIEVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLm1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHtBcnJheX0gb3B0cy5jaG9pY2VzIEFycmF5IG9mIGNob2ljZSBvYmplY3RzXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuaGludF0gSGludCB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5pdGlhbF0gSW5kZXggb2YgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMub3B0aW9uc1BlclBhZ2U9MTBdIE1heCBvcHRpb25zIHRvIGRpc3BsYXkgYXQgb25jZVxuICovXG5jbGFzcyBTZWxlY3RQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy5oaW50ID0gb3B0cy5oaW50IHx8ICctIFVzZSBhcnJvdy1rZXlzLiBSZXR1cm4gdG8gc3VibWl0Lic7XG4gICAgdGhpcy53YXJuID0gb3B0cy53YXJuIHx8ICctIFRoaXMgb3B0aW9uIGlzIGRpc2FibGVkJztcbiAgICB0aGlzLmN1cnNvciA9IG9wdHMuaW5pdGlhbCB8fCAwO1xuICAgIHRoaXMuY2hvaWNlcyA9IG9wdHMuY2hvaWNlcy5tYXAoKGNoLCBpZHgpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgY2ggPT09ICdzdHJpbmcnKVxuICAgICAgICBjaCA9IHt0aXRsZTogY2gsIHZhbHVlOiBpZHh9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGl0bGU6IGNoICYmIChjaC50aXRsZSB8fCBjaC52YWx1ZSB8fCBjaCksXG4gICAgICAgIHZhbHVlOiBjaCAmJiAoY2gudmFsdWUgPT09IHVuZGVmaW5lZCA/IGlkeCA6IGNoLnZhbHVlKSxcbiAgICAgICAgZGVzY3JpcHRpb246IGNoICYmIGNoLmRlc2NyaXB0aW9uLFxuICAgICAgICBzZWxlY3RlZDogY2ggJiYgY2guc2VsZWN0ZWQsXG4gICAgICAgIGRpc2FibGVkOiBjaCAmJiBjaC5kaXNhYmxlZFxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLm9wdGlvbnNQZXJQYWdlID0gb3B0cy5vcHRpb25zUGVyUGFnZSB8fCAxMDtcbiAgICB0aGlzLnZhbHVlID0gKHRoaXMuY2hvaWNlc1t0aGlzLmN1cnNvcl0gfHwge30pLnZhbHVlO1xuICAgIHRoaXMuY2xlYXIgPSBjbGVhcignJywgdGhpcy5vdXQuY29sdW1ucyk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIHRoaXMuY3Vyc29yID0gbjtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5jaG9pY2VzW25dLnZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5tb3ZlQ3Vyc29yKDApO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuZG9uZSA9IHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIGlmICghdGhpcy5zZWxlY3Rpb24uZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZmlyZSgpO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9IGVsc2VcbiAgICAgIHRoaXMuYmVsbCgpO1xuICB9XG5cbiAgZmlyc3QoKSB7XG4gICAgdGhpcy5tb3ZlQ3Vyc29yKDApO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsYXN0KCkge1xuICAgIHRoaXMubW92ZUN1cnNvcih0aGlzLmNob2ljZXMubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gMCkge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY2hvaWNlcy5sZW5ndGggLSAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY3Vyc29yIC0gMSk7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gdGhpcy5jaG9pY2VzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHRoaXMubW92ZUN1cnNvcigwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY3Vyc29yICsgMSk7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMubW92ZUN1cnNvcigodGhpcy5jdXJzb3IgKyAxKSAlIHRoaXMuY2hvaWNlcy5sZW5ndGgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBfKGMsIGtleSkge1xuICAgIGlmIChjID09PSAnICcpIHJldHVybiB0aGlzLnN1Ym1pdCgpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5jaG9pY2VzW3RoaXMuY3Vyc29yXTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5maXJzdFJlbmRlcikgdGhpcy5vdXQud3JpdGUoY3Vyc29yLmhpZGUpO1xuICAgIGVsc2UgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG5cbiAgICBsZXQgeyBzdGFydEluZGV4LCBlbmRJbmRleCB9ID0gZW50cmllc1RvRGlzcGxheSh0aGlzLmN1cnNvciwgdGhpcy5jaG9pY2VzLmxlbmd0aCwgdGhpcy5vcHRpb25zUGVyUGFnZSk7XG5cbiAgICAvLyBQcmludCBwcm9tcHRcbiAgICB0aGlzLm91dHB1dFRleHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLFxuICAgICAgY29sb3IuYm9sZCh0aGlzLm1zZyksXG4gICAgICBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLFxuICAgICAgdGhpcy5kb25lID8gdGhpcy5zZWxlY3Rpb24udGl0bGUgOiB0aGlzLnNlbGVjdGlvbi5kaXNhYmxlZFxuICAgICAgICAgID8gY29sb3IueWVsbG93KHRoaXMud2FybikgOiBjb2xvci5ncmF5KHRoaXMuaGludClcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIC8vIFByaW50IGNob2ljZXNcbiAgICBpZiAoIXRoaXMuZG9uZSkge1xuICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9ICdcXG4nO1xuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmRJbmRleDsgaSsrKSB7XG4gICAgICAgIGxldCB0aXRsZSwgcHJlZml4LCBkZXNjID0gJycsIHYgPSB0aGlzLmNob2ljZXNbaV07XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgdG8gZGlzcGxheSBcIm1vcmUgY2hvaWNlc1wiIGluZGljYXRvcnNcbiAgICAgICAgaWYgKGkgPT09IHN0YXJ0SW5kZXggJiYgc3RhcnRJbmRleCA+IDApIHtcbiAgICAgICAgICBwcmVmaXggPSBmaWd1cmVzLmFycm93VXA7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgdGhpcy5jaG9pY2VzLmxlbmd0aCkge1xuICAgICAgICAgIHByZWZpeCA9IGZpZ3VyZXMuYXJyb3dEb3duO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZWZpeCA9ICcgJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2LmRpc2FibGVkKSB7XG4gICAgICAgICAgdGl0bGUgPSB0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmdyYXkoKS51bmRlcmxpbmUodi50aXRsZSkgOiBjb2xvci5zdHJpa2V0aHJvdWdoKCkuZ3JheSh2LnRpdGxlKTtcbiAgICAgICAgICBwcmVmaXggPSAodGhpcy5jdXJzb3IgPT09IGkgPyBjb2xvci5ib2xkKCkuZ3JheShmaWd1cmVzLnBvaW50ZXIpICsgJyAnIDogJyAgJykgKyBwcmVmaXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGl0bGUgPSB0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodi50aXRsZSkgOiB2LnRpdGxlO1xuICAgICAgICAgIHByZWZpeCA9ICh0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmN5YW4oZmlndXJlcy5wb2ludGVyKSArICcgJyA6ICcgICcpICsgcHJlZml4O1xuICAgICAgICAgIGlmICh2LmRlc2NyaXB0aW9uICYmIHRoaXMuY3Vyc29yID09PSBpKSB7XG4gICAgICAgICAgICBkZXNjID0gYCAtICR7di5kZXNjcmlwdGlvbn1gO1xuICAgICAgICAgICAgaWYgKHByZWZpeC5sZW5ndGggKyB0aXRsZS5sZW5ndGggKyBkZXNjLmxlbmd0aCA+PSB0aGlzLm91dC5jb2x1bW5zXG4gICAgICAgICAgICAgICAgfHwgdi5kZXNjcmlwdGlvbi5zcGxpdCgvXFxyP1xcbi8pLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgZGVzYyA9ICdcXG4nICsgd3JhcCh2LmRlc2NyaXB0aW9uLCB7IG1hcmdpbjogMywgd2lkdGg6IHRoaXMub3V0LmNvbHVtbnMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9IGAke3ByZWZpeH0gJHt0aXRsZX0ke2NvbG9yLmdyYXkoZGVzYyl9XFxuYDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZSh0aGlzLm91dHB1dFRleHQpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2VsZWN0UHJvbXB0O1xuIiwiY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcbmNvbnN0IHsgc3R5bGUsIGNsZWFyIH0gPSByZXF1aXJlKCcuLi91dGlsJyk7XG5jb25zdCB7IGN1cnNvciwgZXJhc2UgfSA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKTtcblxuLyoqXG4gKiBUb2dnbGVQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuaW5pdGlhbD1mYWxzZV0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmFjdGl2ZT0nbm8nXSBBY3RpdmUgbGFiZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbmFjdGl2ZT0nb2ZmJ10gSW5hY3RpdmUgbGFiZWxcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5jbGFzcyBUb2dnbGVQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy52YWx1ZSA9ICEhb3B0cy5pbml0aWFsO1xuICAgIHRoaXMuYWN0aXZlID0gb3B0cy5hY3RpdmUgfHwgJ29uJztcbiAgICB0aGlzLmluYWN0aXZlID0gb3B0cy5pbmFjdGl2ZSB8fCAnb2ZmJztcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLmluaXRpYWxWYWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgaWYgKHRoaXMudmFsdWUgPT09IGZhbHNlKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBhY3RpdmF0ZSgpIHtcbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gdHJ1ZSkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gIH1cbiAgbGVmdCgpIHtcbiAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgfVxuICByaWdodCgpIHtcbiAgICB0aGlzLmFjdGl2YXRlKCk7XG4gIH1cbiAgZG93bigpIHtcbiAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgfVxuICB1cCgpIHtcbiAgICB0aGlzLmFjdGl2YXRlKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYyA9PT0gJyAnKSB7XG4gICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWU7XG4gICAgfSBlbHNlIGlmIChjID09PSAnMScpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoYyA9PT0gJzAnKSB7XG4gICAgICB0aGlzLnZhbHVlID0gZmFsc2U7XG4gICAgfSBlbHNlIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7XG4gICAgZWxzZSB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICBzdXBlci5yZW5kZXIoKTtcblxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtcbiAgICAgIHN0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksXG4gICAgICBjb2xvci5ib2xkKHRoaXMubXNnKSxcbiAgICAgIHN0eWxlLmRlbGltaXRlcih0aGlzLmRvbmUpLFxuICAgICAgdGhpcy52YWx1ZSA/IHRoaXMuaW5hY3RpdmUgOiBjb2xvci5jeWFuKCkudW5kZXJsaW5lKHRoaXMuaW5hY3RpdmUpLFxuICAgICAgY29sb3IuZ3JheSgnLycpLFxuICAgICAgdGhpcy52YWx1ZSA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodGhpcy5hY3RpdmUpIDogdGhpcy5hY3RpdmVcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9nZ2xlUHJvbXB0O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jbGFzcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKHt0b2tlbiwgZGF0ZSwgcGFydHMsIGxvY2FsZXN9KSB7XG4gICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIHRoaXMuZGF0ZSA9IGRhdGUgfHwgbmV3IERhdGUoKTtcbiAgICB0aGlzLnBhcnRzID0gcGFydHMgfHwgW3RoaXNdO1xuICAgIHRoaXMubG9jYWxlcyA9IGxvY2FsZXMgfHwge307XG4gIH1cblxuICB1cCgpIHt9XG5cbiAgZG93bigpIHt9XG5cbiAgbmV4dCgpIHtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gdGhpcy5wYXJ0cy5pbmRleE9mKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnBhcnRzLmZpbmQoKHBhcnQsIGlkeCkgPT4gaWR4ID4gY3VycmVudElkeCAmJiBwYXJ0IGluc3RhbmNlb2YgRGF0ZVBhcnQpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7fVxuXG4gIHByZXYoKSB7XG4gICAgbGV0IHBhcnRzID0gW10uY29uY2F0KHRoaXMucGFydHMpLnJldmVyc2UoKTtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gcGFydHMuaW5kZXhPZih0aGlzKTtcbiAgICByZXR1cm4gcGFydHMuZmluZCgocGFydCwgaWR4KSA9PiBpZHggPiBjdXJyZW50SWR4ICYmIHBhcnQgaW5zdGFuY2VvZiBEYXRlUGFydCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuZGF0ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEYXRlUGFydDtcblxuXG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jbGFzcyBNZXJpZGllbSBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldEhvdXJzKCh0aGlzLmRhdGUuZ2V0SG91cnMoKSArIDEyKSAlIDI0KTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgdGhpcy51cCgpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IG1lcmlkaWVtID0gdGhpcy5kYXRlLmdldEhvdXJzKCkgPiAxMiA/ICdwbScgOiAnYW0nO1xuICAgIHJldHVybiAvXFxBLy50ZXN0KHRoaXMudG9rZW4pID8gbWVyaWRpZW0udG9VcHBlckNhc2UoKSA6IG1lcmlkaWVtO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWVyaWRpZW07XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jb25zdCBwb3MgPSBuID0+IHtcbiAgbiA9IG4gJSAxMDtcbiAgcmV0dXJuIG4gPT09IDEgPyAnc3QnXG4gICAgICAgOiBuID09PSAyID8gJ25kJ1xuICAgICAgIDogbiA9PT0gMyA/ICdyZCdcbiAgICAgICA6ICd0aCc7XG59XG5cbmNsYXNzIERheSBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldERhdGUodGhpcy5kYXRlLmdldERhdGUoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0RGF0ZSh0aGlzLmRhdGUuZ2V0RGF0ZSgpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0RGF0ZShwYXJzZUludCh2YWwuc3Vic3RyKC0yKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IGRhdGUgPSB0aGlzLmRhdGUuZ2V0RGF0ZSgpO1xuICAgIGxldCBkYXkgPSB0aGlzLmRhdGUuZ2V0RGF5KCk7XG4gICAgcmV0dXJuIHRoaXMudG9rZW4gPT09ICdERCcgPyBTdHJpbmcoZGF0ZSkucGFkU3RhcnQoMiwgJzAnKVxuICAgICAgICAgOiB0aGlzLnRva2VuID09PSAnRG8nID8gZGF0ZSArIHBvcyhkYXRlKVxuICAgICAgICAgOiB0aGlzLnRva2VuID09PSAnZCcgPyBkYXkgKyAxXG4gICAgICAgICA6IHRoaXMudG9rZW4gPT09ICdkZGQnID8gdGhpcy5sb2NhbGVzLndlZWtkYXlzU2hvcnRbZGF5XVxuICAgICAgICAgOiB0aGlzLnRva2VuID09PSAnZGRkZCcgPyB0aGlzLmxvY2FsZXMud2Vla2RheXNbZGF5XVxuICAgICAgICAgOiBkYXRlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGF5O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgSG91cnMgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRIb3Vycyh0aGlzLmRhdGUuZ2V0SG91cnMoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0SG91cnModGhpcy5kYXRlLmdldEhvdXJzKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHRoaXMuZGF0ZS5zZXRIb3VycyhwYXJzZUludCh2YWwuc3Vic3RyKC0yKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IGhvdXJzID0gdGhpcy5kYXRlLmdldEhvdXJzKCk7XG4gICAgaWYgKC9oLy50ZXN0KHRoaXMudG9rZW4pKVxuICAgICAgaG91cnMgPSAoaG91cnMgJSAxMikgfHwgMTI7XG4gICAgcmV0dXJuIHRoaXMudG9rZW4ubGVuZ3RoID4gMSA/IFN0cmluZyhob3VycykucGFkU3RhcnQoMiwgJzAnKSA6IGhvdXJzO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gSG91cnM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jbGFzcyBNaWxsaXNlY29uZHMgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlLmdldE1pbGxpc2Vjb25kcygpICsgMSk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlLmdldE1pbGxpc2Vjb25kcygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWlsbGlzZWNvbmRzKHBhcnNlSW50KHZhbC5zdWJzdHIoLSh0aGlzLnRva2VuLmxlbmd0aCkpKSk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSkucGFkU3RhcnQoNCwgJzAnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzdHIoMCwgdGhpcy50b2tlbi5sZW5ndGgpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWlsbGlzZWNvbmRzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgTWludXRlcyBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldE1pbnV0ZXModGhpcy5kYXRlLmdldE1pbnV0ZXMoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWludXRlcyh0aGlzLmRhdGUuZ2V0TWludXRlcygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWludXRlcyhwYXJzZUludCh2YWwuc3Vic3RyKC0yKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IG0gPSB0aGlzLmRhdGUuZ2V0TWludXRlcygpO1xuICAgIHJldHVybiB0aGlzLnRva2VuLmxlbmd0aCA+IDEgPyBTdHJpbmcobSkucGFkU3RhcnQoMiwgJzAnKSA6IG07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNaW51dGVzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgTW9udGggZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNb250aCh0aGlzLmRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0TW9udGgodGhpcy5kYXRlLmdldE1vbnRoKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHZhbCA9IHBhcnNlSW50KHZhbC5zdWJzdHIoLTIpKSAtIDE7XG4gICAgdGhpcy5kYXRlLnNldE1vbnRoKHZhbCA8IDAgPyAwIDogdmFsKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBtb250aCA9IHRoaXMuZGF0ZS5nZXRNb250aCgpO1xuICAgIGxldCB0bCA9IHRoaXMudG9rZW4ubGVuZ3RoO1xuICAgIHJldHVybiB0bCA9PT0gMiA/IFN0cmluZyhtb250aCArIDEpLnBhZFN0YXJ0KDIsICcwJylcbiAgICAgICAgICAgOiB0bCA9PT0gMyA/IHRoaXMubG9jYWxlcy5tb250aHNTaG9ydFttb250aF1cbiAgICAgICAgICAgICA6IHRsID09PSA0ID8gdGhpcy5sb2NhbGVzLm1vbnRoc1ttb250aF1cbiAgICAgICAgICAgICAgIDogU3RyaW5nKG1vbnRoICsgMSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNb250aDtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgRGF0ZVBhcnQgPSByZXF1aXJlKCcuL2RhdGVwYXJ0Jyk7XG5cbmNsYXNzIFNlY29uZHMgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRTZWNvbmRzKHRoaXMuZGF0ZS5nZXRTZWNvbmRzKCkgKyAxKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgdGhpcy5kYXRlLnNldFNlY29uZHModGhpcy5kYXRlLmdldFNlY29uZHMoKSAtIDEpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7XG4gICAgdGhpcy5kYXRlLnNldFNlY29uZHMocGFyc2VJbnQodmFsLnN1YnN0cigtMikpKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBzID0gdGhpcy5kYXRlLmdldFNlY29uZHMoKTtcbiAgICByZXR1cm4gdGhpcy50b2tlbi5sZW5ndGggPiAxID8gU3RyaW5nKHMpLnBhZFN0YXJ0KDIsICcwJykgOiBzO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2Vjb25kcztcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgRGF0ZVBhcnQgPSByZXF1aXJlKCcuL2RhdGVwYXJ0Jyk7XG5cbmNsYXNzIFllYXIgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRGdWxsWWVhcih0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0RnVsbFllYXIodGhpcy5kYXRlLmdldEZ1bGxZZWFyKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHRoaXMuZGF0ZS5zZXRGdWxsWWVhcih2YWwuc3Vic3RyKC00KSk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICBsZXQgeWVhciA9IFN0cmluZyh0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSkucGFkU3RhcnQoNCwgJzAnKTtcbiAgICByZXR1cm4gdGhpcy50b2tlbi5sZW5ndGggPT09IDIgPyB5ZWFyLnN1YnN0cigtMikgOiB5ZWFyO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gWWVhcjtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIERhdGVQYXJ0OiByZXF1aXJlKCcuL2RhdGVwYXJ0JyksXG4gIE1lcmlkaWVtOiByZXF1aXJlKCcuL21lcmlkaWVtJyksXG4gIERheTogcmVxdWlyZSgnLi9kYXknKSxcbiAgSG91cnM6IHJlcXVpcmUoJy4vaG91cnMnKSxcbiAgTWlsbGlzZWNvbmRzOiByZXF1aXJlKCcuL21pbGxpc2Vjb25kcycpLFxuICBNaW51dGVzOiByZXF1aXJlKCcuL21pbnV0ZXMnKSxcbiAgTW9udGg6IHJlcXVpcmUoJy4vbW9udGgnKSxcbiAgU2Vjb25kczogcmVxdWlyZSgnLi9zZWNvbmRzJyksXG4gIFllYXI6IHJlcXVpcmUoJy4veWVhcicpLFxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5jb25zdCBQcm9tcHQgPSByZXF1aXJlKCcuL3Byb21wdCcpO1xuY29uc3QgeyBzdHlsZSwgY2xlYXIsIGZpZ3VyZXMgfSA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcbmNvbnN0IHsgZXJhc2UsIGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuY29uc3QgeyBEYXRlUGFydCwgTWVyaWRpZW0sIERheSwgSG91cnMsIE1pbGxpc2Vjb25kcywgTWludXRlcywgTW9udGgsIFNlY29uZHMsIFllYXIgfSA9IHJlcXVpcmUoJy4uL2RhdGVwYXJ0cycpO1xuXG5jb25zdCByZWdleCA9IC9cXFxcKC4pfFwiKCg/OlxcXFxbXCJcXFxcXXxbXlwiXSkrKVwifChEW0RvXT98ZHszLDR9fGQpfChNezEsNH0pfChZWSg/OllZKT8pfChbYUFdKXwoW0hoXXsxLDJ9KXwobXsxLDJ9KXwoc3sxLDJ9KXwoU3sxLDR9KXwuL2c7XG5jb25zdCByZWdleEdyb3VwcyA9IHtcbiAgMTogKHt0b2tlbn0pID0+IHRva2VuLnJlcGxhY2UoL1xcXFwoLikvZywgJyQxJyksXG4gIDI6IChvcHRzKSA9PiBuZXcgRGF5KG9wdHMpLCAvLyBEYXkgLy8gVE9ET1xuICAzOiAob3B0cykgPT4gbmV3IE1vbnRoKG9wdHMpLCAvLyBNb250aFxuICA0OiAob3B0cykgPT4gbmV3IFllYXIob3B0cyksIC8vIFllYXJcbiAgNTogKG9wdHMpID0+IG5ldyBNZXJpZGllbShvcHRzKSwgLy8gQU0vUE0gLy8gVE9ETyAoc3BlY2lhbClcbiAgNjogKG9wdHMpID0+IG5ldyBIb3VycyhvcHRzKSwgLy8gSG91cnNcbiAgNzogKG9wdHMpID0+IG5ldyBNaW51dGVzKG9wdHMpLCAvLyBNaW51dGVzXG4gIDg6IChvcHRzKSA9PiBuZXcgU2Vjb25kcyhvcHRzKSwgLy8gU2Vjb25kc1xuICA5OiAob3B0cykgPT4gbmV3IE1pbGxpc2Vjb25kcyhvcHRzKSwgLy8gRnJhY3Rpb25hbCBzZWNvbmRzXG59XG5cbmNvbnN0IGRmbHRMb2NhbGVzID0ge1xuICBtb250aHM6ICdKYW51YXJ5LEZlYnJ1YXJ5LE1hcmNoLEFwcmlsLE1heSxKdW5lLEp1bHksQXVndXN0LFNlcHRlbWJlcixPY3RvYmVyLE5vdmVtYmVyLERlY2VtYmVyJy5zcGxpdCgnLCcpLFxuICBtb250aHNTaG9ydDogJ0phbixGZWIsTWFyLEFwcixNYXksSnVuLEp1bCxBdWcsU2VwLE9jdCxOb3YsRGVjJy5zcGxpdCgnLCcpLFxuICB3ZWVrZGF5czogJ1N1bmRheSxNb25kYXksVHVlc2RheSxXZWRuZXNkYXksVGh1cnNkYXksRnJpZGF5LFNhdHVyZGF5Jy5zcGxpdCgnLCcpLFxuICB3ZWVrZGF5c1Nob3J0OiAnU3VuLE1vbixUdWUsV2VkLFRodSxGcmksU2F0Jy5zcGxpdCgnLCcpXG59XG5cblxuLyoqXG4gKiBEYXRlUHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5pdGlhbF0gSW5kZXggb2YgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm1hc2tdIFRoZSBmb3JtYXQgbWFza1xuICogQHBhcmFtIHtvYmplY3R9IFtvcHRzLmxvY2FsZXNdIFRoZSBkYXRlIGxvY2FsZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5lcnJvcl0gVGhlIGVycm9yIG1lc3NhZ2Ugc2hvd24gb24gaW52YWxpZCB2YWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBzdWJtaXR0ZWQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5jbGFzcyBEYXRlUHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMubXNnID0gb3B0cy5tZXNzYWdlO1xuICAgIHRoaXMuY3Vyc29yID0gMDtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5sb2NhbGVzID0gT2JqZWN0LmFzc2lnbihkZmx0TG9jYWxlcywgb3B0cy5sb2NhbGVzKTtcbiAgICB0aGlzLl9kYXRlID0gb3B0cy5pbml0aWFsIHx8IG5ldyBEYXRlKCk7XG4gICAgdGhpcy5lcnJvck1zZyA9IG9wdHMuZXJyb3IgfHwgJ1BsZWFzZSBFbnRlciBBIFZhbGlkIFZhbHVlJztcbiAgICB0aGlzLnZhbGlkYXRvciA9IG9wdHMudmFsaWRhdGUgfHwgKCgpID0+IHRydWUpO1xuICAgIHRoaXMubWFzayA9IG9wdHMubWFzayB8fCAnWVlZWS1NTS1ERCBISDptbTpzcyc7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGVcbiAgfVxuXG4gIGdldCBkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRlO1xuICB9XG5cbiAgc2V0IGRhdGUoZGF0ZSkge1xuICAgIGlmIChkYXRlKSB0aGlzLl9kYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkpO1xuICB9XG5cbiAgc2V0IG1hc2sobWFzaykge1xuICAgIGxldCByZXN1bHQ7XG4gICAgdGhpcy5wYXJ0cyA9IFtdO1xuICAgIHdoaWxlKHJlc3VsdCA9IHJlZ2V4LmV4ZWMobWFzaykpIHtcbiAgICAgIGxldCBtYXRjaCA9IHJlc3VsdC5zaGlmdCgpO1xuICAgICAgbGV0IGlkeCA9IHJlc3VsdC5maW5kSW5kZXgoZ3IgPT4gZ3IgIT0gbnVsbCk7XG4gICAgICB0aGlzLnBhcnRzLnB1c2goaWR4IGluIHJlZ2V4R3JvdXBzXG4gICAgICAgID8gcmVnZXhHcm91cHNbaWR4XSh7IHRva2VuOiByZXN1bHRbaWR4XSB8fCBtYXRjaCwgZGF0ZTogdGhpcy5kYXRlLCBwYXJ0czogdGhpcy5wYXJ0cywgbG9jYWxlczogdGhpcy5sb2NhbGVzIH0pXG4gICAgICAgIDogcmVzdWx0W2lkeF0gfHwgbWF0Y2gpO1xuICAgIH1cblxuICAgIGxldCBwYXJ0cyA9IHRoaXMucGFydHMucmVkdWNlKChhcnIsIGkpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgaSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIGFyclthcnIubGVuZ3RoIC0gMV0gPT09ICdzdHJpbmcnKVxuICAgICAgICBhcnJbYXJyLmxlbmd0aCAtIDFdICs9IGk7XG4gICAgICBlbHNlIGFyci5wdXNoKGkpO1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9LCBbXSk7XG5cbiAgICB0aGlzLnBhcnRzLnNwbGljZSgwKTtcbiAgICB0aGlzLnBhcnRzLnB1c2goLi4ucGFydHMpO1xuICAgIHRoaXMucmVzZXQoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIHRoaXMudHlwZWQgPSAnJztcbiAgICB0aGlzLmN1cnNvciA9IG47XG4gICAgdGhpcy5maXJlKCk7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5wYXJ0cy5maW5kSW5kZXgocCA9PiBwIGluc3RhbmNlb2YgRGF0ZVBhcnQpKTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZSgpIHtcbiAgICBsZXQgdmFsaWQgPSBhd2FpdCB0aGlzLnZhbGlkYXRvcih0aGlzLnZhbHVlKTtcbiAgICBpZiAodHlwZW9mIHZhbGlkID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5lcnJvck1zZyA9IHZhbGlkO1xuICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5lcnJvciA9ICF2YWxpZDtcbiAgfVxuXG4gIGFzeW5jIHN1Ym1pdCgpIHtcbiAgICBhd2FpdCB0aGlzLnZhbGlkYXRlKCk7XG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIHRoaXMuY29sb3IgPSAncmVkJztcbiAgICAgIHRoaXMuZmlyZSgpO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICB1cCgpIHtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0udXAoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0uZG93bigpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIGxldCBwcmV2ID0gdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0ucHJldigpO1xuICAgIGlmIChwcmV2ID09IG51bGwpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5wYXJ0cy5pbmRleE9mKHByZXYpKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmlnaHQoKSB7XG4gICAgbGV0IG5leHQgPSB0aGlzLnBhcnRzW3RoaXMuY3Vyc29yXS5uZXh0KCk7XG4gICAgaWYgKG5leHQgPT0gbnVsbCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcih0aGlzLnBhcnRzLmluZGV4T2YobmV4dCkpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIGxldCBuZXh0ID0gdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0ubmV4dCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcihuZXh0XG4gICAgICA/IHRoaXMucGFydHMuaW5kZXhPZihuZXh0KVxuICAgICAgOiB0aGlzLnBhcnRzLmZpbmRJbmRleCgocGFydCkgPT4gcGFydCBpbnN0YW5jZW9mIERhdGVQYXJ0KSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIF8oYykge1xuICAgIGlmICgvXFxkLy50ZXN0KGMpKSB7XG4gICAgICB0aGlzLnR5cGVkICs9IGM7XG4gICAgICB0aGlzLnBhcnRzW3RoaXMuY3Vyc29yXS5zZXRUbyh0aGlzLnR5cGVkKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7XG4gICAgZWxzZSB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICBzdXBlci5yZW5kZXIoKTtcblxuICAgIC8vIFByaW50IHByb21wdFxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtcbiAgICAgIHN0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksXG4gICAgICBjb2xvci5ib2xkKHRoaXMubXNnKSxcbiAgICAgIHN0eWxlLmRlbGltaXRlcihmYWxzZSksXG4gICAgICB0aGlzLnBhcnRzLnJlZHVjZSgoYXJyLCBwLCBpZHgpID0+IGFyci5jb25jYXQoaWR4ID09PSB0aGlzLmN1cnNvciAmJiAhdGhpcy5kb25lID8gY29sb3IuY3lhbigpLnVuZGVybGluZShwLnRvU3RyaW5nKCkpIDogcCksIFtdKVxuICAgICAgICAgIC5qb2luKCcnKVxuICAgIF0uam9pbignICcpO1xuXG4gICAgLy8gUHJpbnQgZXJyb3JcbiAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9IHRoaXMuZXJyb3JNc2cuc3BsaXQoJ1xcbicpLnJlZHVjZShcbiAgICAgICAgICAoYSwgbCwgaSkgPT4gYSArIGBcXG4ke2kgPyBgIGAgOiBmaWd1cmVzLnBvaW50ZXJTbWFsbH0gJHtjb2xvci5yZWQoKS5pdGFsaWMobCl9YCwgYGApO1xuICAgIH1cblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGF0ZVByb21wdDtcbiIsImNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcbmNvbnN0IFByb21wdCA9IHJlcXVpcmUoJy4vcHJvbXB0Jyk7XG5jb25zdCB7IGN1cnNvciwgZXJhc2UgfSA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKTtcbmNvbnN0IHsgc3R5bGUsIGZpZ3VyZXMsIGNsZWFyLCBsaW5lcyB9ID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xuXG5jb25zdCBpc051bWJlciA9IC9bMC05XS87XG5jb25zdCBpc0RlZiA9IGFueSA9PiBhbnkgIT09IHVuZGVmaW5lZDtcbmNvbnN0IHJvdW5kID0gKG51bWJlciwgcHJlY2lzaW9uKSA9PiB7XG4gIGxldCBmYWN0b3IgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uKTtcbiAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyICogZmFjdG9yKSAvIGZhY3Rvcjtcbn1cblxuLyoqXG4gKiBOdW1iZXJQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5zdHlsZT0nZGVmYXVsdCddIFJlbmRlciBzdHlsZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmluaXRpYWxdIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXg9K0luZmluaXR5XSBNYXggdmFsdWVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5taW49LUluZmluaXR5XSBNaW4gdmFsdWVcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuZmxvYXQ9ZmFsc2VdIFBhcnNlIGlucHV0IGFzIGZsb2F0c1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnJvdW5kPTJdIFJvdW5kIGZsb2F0cyB0byB4IGRlY2ltYWxzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5jcmVtZW50PTFdIE51bWJlciB0byBpbmNyZW1lbnQgYnkgd2hlbiB1c2luZyBhcnJvdy1rZXlzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy52YWxpZGF0ZV0gVmFsaWRhdGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmVycm9yXSBUaGUgaW52YWxpZCBlcnJvciBsYWJlbFxuICovXG5jbGFzcyBOdW1iZXJQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSBzdHlsZS5yZW5kZXIob3B0cy5zdHlsZSk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy5pbml0aWFsID0gaXNEZWYob3B0cy5pbml0aWFsKSA/IG9wdHMuaW5pdGlhbCA6ICcnO1xuICAgIHRoaXMuZmxvYXQgPSAhIW9wdHMuZmxvYXQ7XG4gICAgdGhpcy5yb3VuZCA9IG9wdHMucm91bmQgfHwgMjtcbiAgICB0aGlzLmluYyA9IG9wdHMuaW5jcmVtZW50IHx8IDE7XG4gICAgdGhpcy5taW4gPSBpc0RlZihvcHRzLm1pbikgPyBvcHRzLm1pbiA6IC1JbmZpbml0eTtcbiAgICB0aGlzLm1heCA9IGlzRGVmKG9wdHMubWF4KSA/IG9wdHMubWF4IDogSW5maW5pdHk7XG4gICAgdGhpcy5lcnJvck1zZyA9IG9wdHMuZXJyb3IgfHwgYFBsZWFzZSBFbnRlciBBIFZhbGlkIFZhbHVlYDtcbiAgICB0aGlzLnZhbGlkYXRvciA9IG9wdHMudmFsaWRhdGUgfHwgKCgpID0+IHRydWUpO1xuICAgIHRoaXMuY29sb3IgPSBgY3lhbmA7XG4gICAgdGhpcy52YWx1ZSA9IGBgO1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICB0aGlzLmxhc3RIaXQgPSAwO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgdmFsdWUodikge1xuICAgIGlmICghdiAmJiB2ICE9PSAwKSB7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVuZGVyZWQgPSBjb2xvci5ncmF5KHRoaXMudHJhbnNmb3JtLnJlbmRlcihgJHt0aGlzLmluaXRpYWx9YCkpO1xuICAgICAgdGhpcy5fdmFsdWUgPSBgYDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXJlZCA9IHRoaXMudHJhbnNmb3JtLnJlbmRlcihgJHtyb3VuZCh2LCB0aGlzLnJvdW5kKX1gKTtcbiAgICAgIHRoaXMuX3ZhbHVlID0gcm91bmQodiwgdGhpcy5yb3VuZCk7XG4gICAgfVxuICAgIHRoaXMuZmlyZSgpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHBhcnNlKHgpIHtcbiAgICByZXR1cm4gdGhpcy5mbG9hdCA/IHBhcnNlRmxvYXQoeCkgOiBwYXJzZUludCh4KTtcbiAgfVxuXG4gIHZhbGlkKGMpIHtcbiAgICByZXR1cm4gYyA9PT0gYC1gIHx8IGMgPT09IGAuYCAmJiB0aGlzLmZsb2F0IHx8IGlzTnVtYmVyLnRlc3QoYylcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGV4aXQoKSB7XG4gICAgdGhpcy5hYm9ydCgpO1xuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgbGV0IHggPSB0aGlzLnZhbHVlO1xuICAgIHRoaXMudmFsdWUgPSB4ICE9PSBgYCA/IHggOiB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZShgXFxuYCk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGUoKSB7XG4gICAgbGV0IHZhbGlkID0gYXdhaXQgdGhpcy52YWxpZGF0b3IodGhpcy52YWx1ZSk7XG4gICAgaWYgKHR5cGVvZiB2YWxpZCA9PT0gYHN0cmluZ2ApIHtcbiAgICAgIHRoaXMuZXJyb3JNc2cgPSB2YWxpZDtcbiAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuZXJyb3IgPSAhdmFsaWQ7XG4gIH1cblxuICBhc3luYyBzdWJtaXQoKSB7XG4gICAgYXdhaXQgdGhpcy52YWxpZGF0ZSgpO1xuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aGlzLmNvbG9yID0gYHJlZGA7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB4ID0gdGhpcy52YWx1ZTtcbiAgICB0aGlzLnZhbHVlID0geCAhPT0gYGAgPyB4IDogdGhpcy5pbml0aWFsO1xuICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5lcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoYFxcbmApO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICBpZih0aGlzLnZhbHVlID09PSAnJykge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluIC0gdGhpcy5pbmM7XG4gICAgfVxuICAgIGlmICh0aGlzLnZhbHVlID49IHRoaXMubWF4KSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSArPSB0aGlzLmluYztcbiAgICB0aGlzLmNvbG9yID0gYGN5YW5gO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICBpZih0aGlzLnZhbHVlID09PSAnJykge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluICsgdGhpcy5pbmM7XG4gICAgfVxuICAgIGlmICh0aGlzLnZhbHVlIDw9IHRoaXMubWluKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSAtPSB0aGlzLmluYztcbiAgICB0aGlzLmNvbG9yID0gYGN5YW5gO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgbGV0IHZhbCA9IHRoaXMudmFsdWUudG9TdHJpbmcoKTtcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnBhcnNlKCh2YWwgPSB2YWwuc2xpY2UoMCwgLTEpKSkgfHwgYGA7XG4gICAgaWYgKHRoaXMudmFsdWUgIT09ICcnICYmIHRoaXMudmFsdWUgPCB0aGlzLm1pbikge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluO1xuICAgIH1cbiAgICB0aGlzLmNvbG9yID0gYGN5YW5gO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIF8oYywga2V5KSB7XG4gICAgaWYgKCF0aGlzLnZhbGlkKGMpKSByZXR1cm4gdGhpcy5iZWxsKCk7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmIChub3cgLSB0aGlzLmxhc3RIaXQgPiAxMDAwKSB0aGlzLnR5cGVkID0gYGA7IC8vIDFzIGVsYXBzZWRcbiAgICB0aGlzLnR5cGVkICs9IGM7XG4gICAgdGhpcy5sYXN0SGl0ID0gbm93O1xuICAgIHRoaXMuY29sb3IgPSBgY3lhbmA7XG5cbiAgICBpZiAoYyA9PT0gYC5gKSByZXR1cm4gdGhpcy5maXJlKCk7XG5cbiAgICB0aGlzLnZhbHVlID0gTWF0aC5taW4odGhpcy5wYXJzZSh0aGlzLnR5cGVkKSwgdGhpcy5tYXgpO1xuICAgIGlmICh0aGlzLnZhbHVlID4gdGhpcy5tYXgpIHRoaXMudmFsdWUgPSB0aGlzLm1heDtcbiAgICBpZiAodGhpcy52YWx1ZSA8IHRoaXMubWluKSB0aGlzLnZhbHVlID0gdGhpcy5taW47XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuZmlyc3RSZW5kZXIpIHtcbiAgICAgIGlmICh0aGlzLm91dHB1dEVycm9yKVxuICAgICAgICB0aGlzLm91dC53cml0ZShjdXJzb3IuZG93bihsaW5lcyh0aGlzLm91dHB1dEVycm9yLCB0aGlzLm91dC5jb2x1bW5zKSAtIDEpICsgY2xlYXIodGhpcy5vdXRwdXRFcnJvciwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgICAgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgfVxuICAgIHN1cGVyLnJlbmRlcigpO1xuICAgIHRoaXMub3V0cHV0RXJyb3IgPSAnJztcblxuICAgIC8vIFByaW50IHByb21wdFxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtcbiAgICAgIHN0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksXG4gICAgICBjb2xvci5ib2xkKHRoaXMubXNnKSxcbiAgICAgIHN0eWxlLmRlbGltaXRlcih0aGlzLmRvbmUpLFxuICAgICAgIXRoaXMuZG9uZSB8fCAoIXRoaXMuZG9uZSAmJiAhdGhpcy5wbGFjZWhvbGRlcilcbiAgICAgICAgICA/IGNvbG9yW3RoaXMuY29sb3JdKCkudW5kZXJsaW5lKHRoaXMucmVuZGVyZWQpIDogdGhpcy5yZW5kZXJlZFxuICAgIF0uam9pbihgIGApO1xuXG4gICAgLy8gUHJpbnQgZXJyb3JcbiAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgdGhpcy5vdXRwdXRFcnJvciArPSB0aGlzLmVycm9yTXNnLnNwbGl0KGBcXG5gKVxuICAgICAgICAgIC5yZWR1Y2UoKGEsIGwsIGkpID0+IGEgKyBgXFxuJHtpID8gYCBgIDogZmlndXJlcy5wb2ludGVyU21hbGx9ICR7Y29sb3IucmVkKCkuaXRhbGljKGwpfWAsIGBgKTtcbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZShlcmFzZS5saW5lICsgY3Vyc29yLnRvKDApICsgdGhpcy5vdXRwdXRUZXh0ICsgY3Vyc29yLnNhdmUgKyB0aGlzLm91dHB1dEVycm9yICsgY3Vyc29yLnJlc3RvcmUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyUHJvbXB0O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5jb25zdCB7IGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcbmNvbnN0IHsgY2xlYXIsIGZpZ3VyZXMsIHN0eWxlLCB3cmFwLCBlbnRyaWVzVG9EaXNwbGF5IH0gPSByZXF1aXJlKCcuLi91dGlsJyk7XG5cbi8qKlxuICogTXVsdGlzZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLndhcm5dIEhpbnQgc2hvd24gZm9yIGRpc2FibGVkIGNob2ljZXNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXhdIE1heCBjaG9pY2VzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm9wdGlvbnNQZXJQYWdlPTEwXSBNYXggb3B0aW9ucyB0byBkaXNwbGF5IGF0IG9uY2VcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5jbGFzcyBNdWx0aXNlbGVjdFByb21wdCBleHRlbmRzIFByb21wdCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmN1cnNvciA9IG9wdHMuY3Vyc29yIHx8IDA7XG4gICAgdGhpcy5zY3JvbGxJbmRleCA9IG9wdHMuY3Vyc29yIHx8IDA7XG4gICAgdGhpcy5oaW50ID0gb3B0cy5oaW50IHx8ICcnO1xuICAgIHRoaXMud2FybiA9IG9wdHMud2FybiB8fCAnLSBUaGlzIG9wdGlvbiBpcyBkaXNhYmxlZCAtJztcbiAgICB0aGlzLm1pblNlbGVjdGVkID0gb3B0cy5taW47XG4gICAgdGhpcy5zaG93TWluRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLm1heENob2ljZXMgPSBvcHRzLm1heDtcbiAgICB0aGlzLmluc3RydWN0aW9ucyA9IG9wdHMuaW5zdHJ1Y3Rpb25zO1xuICAgIHRoaXMub3B0aW9uc1BlclBhZ2UgPSBvcHRzLm9wdGlvbnNQZXJQYWdlIHx8IDEwO1xuICAgIHRoaXMudmFsdWUgPSBvcHRzLmNob2ljZXMubWFwKChjaCwgaWR4KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNoID09PSAnc3RyaW5nJylcbiAgICAgICAgY2ggPSB7dGl0bGU6IGNoLCB2YWx1ZTogaWR4fTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBjaCAmJiAoY2gudGl0bGUgfHwgY2gudmFsdWUgfHwgY2gpLFxuICAgICAgICBkZXNjcmlwdGlvbjogY2ggJiYgY2guZGVzY3JpcHRpb24sXG4gICAgICAgIHZhbHVlOiBjaCAmJiAoY2gudmFsdWUgPT09IHVuZGVmaW5lZCA/IGlkeCA6IGNoLnZhbHVlKSxcbiAgICAgICAgc2VsZWN0ZWQ6IGNoICYmIGNoLnNlbGVjdGVkLFxuICAgICAgICBkaXNhYmxlZDogY2ggJiYgY2guZGlzYWJsZWRcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICBpZiAoIW9wdHMub3ZlcnJpZGVSZW5kZXIpIHtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy52YWx1ZS5tYXAodiA9PiAhdi5zZWxlY3RlZCk7XG4gICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZS5maWx0ZXIodiA9PiB2LnNlbGVjdGVkKTtcbiAgfVxuXG4gIGV4aXQoKSB7XG4gICAgdGhpcy5hYm9ydCgpO1xuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBzdWJtaXQoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnZhbHVlXG4gICAgICAuZmlsdGVyKGUgPT4gZS5zZWxlY3RlZCk7XG4gICAgaWYgKHRoaXMubWluU2VsZWN0ZWQgJiYgc2VsZWN0ZWQubGVuZ3RoIDwgdGhpcy5taW5TZWxlY3RlZCkge1xuICAgICAgdGhpcy5zaG93TWluRXJyb3IgPSB0cnVlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5maXJlKCk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZpcnN0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gMDtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbGFzdCgpIHtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMudmFsdWUubGVuZ3RoIC0gMTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG4gIG5leHQoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSAodGhpcy5jdXJzb3IgKyAxKSAlIHRoaXMudmFsdWUubGVuZ3RoO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICB1cCgpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IgPT09IDApIHtcbiAgICAgIHRoaXMuY3Vyc29yID0gdGhpcy52YWx1ZS5sZW5ndGggLSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvci0tO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IgPT09IHRoaXMudmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvcisrO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbGVmdCgpIHtcbiAgICB0aGlzLnZhbHVlW3RoaXMuY3Vyc29yXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByaWdodCgpIHtcbiAgICBpZiAodGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZVt0aGlzLmN1cnNvcl0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBoYW5kbGVTcGFjZVRvZ2dsZSgpIHtcbiAgICBjb25zdCB2ID0gdGhpcy52YWx1ZVt0aGlzLmN1cnNvcl07XG5cbiAgICBpZiAodi5zZWxlY3RlZCkge1xuICAgICAgdi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9IGVsc2UgaWYgKHYuZGlzYWJsZWQgfHwgdGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHYuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVBbGwoKSB7XG4gICAgaWYgKHRoaXMubWF4Q2hvaWNlcyAhPT0gdW5kZWZpbmVkIHx8IHRoaXMudmFsdWVbdGhpcy5jdXJzb3JdLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3U2VsZWN0ZWQgPSAhdGhpcy52YWx1ZVt0aGlzLmN1cnNvcl0uc2VsZWN0ZWQ7XG4gICAgdGhpcy52YWx1ZS5maWx0ZXIodiA9PiAhdi5kaXNhYmxlZCkuZm9yRWFjaCh2ID0+IHYuc2VsZWN0ZWQgPSBuZXdTZWxlY3RlZCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIF8oYywga2V5KSB7XG4gICAgaWYgKGMgPT09ICcgJykge1xuICAgICAgdGhpcy5oYW5kbGVTcGFjZVRvZ2dsZSgpO1xuICAgIH0gZWxzZSBpZiAoYyA9PT0gJ2EnKSB7XG4gICAgICB0aGlzLnRvZ2dsZUFsbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmluc3RydWN0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuaW5zdHJ1Y3Rpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnN0cnVjdGlvbnM7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ1xcbkluc3RydWN0aW9uczpcXG4nXG4gICAgICAgICsgYCAgICAke2ZpZ3VyZXMuYXJyb3dVcH0vJHtmaWd1cmVzLmFycm93RG93bn06IEhpZ2hsaWdodCBvcHRpb25cXG5gXG4gICAgICAgICsgYCAgICAke2ZpZ3VyZXMuYXJyb3dMZWZ0fS8ke2ZpZ3VyZXMuYXJyb3dSaWdodH0vW3NwYWNlXTogVG9nZ2xlIHNlbGVjdGlvblxcbmBcbiAgICAgICAgKyAodGhpcy5tYXhDaG9pY2VzID09PSB1bmRlZmluZWQgPyBgICAgIGE6IFRvZ2dsZSBhbGxcXG5gIDogJycpXG4gICAgICAgICsgYCAgICBlbnRlci9yZXR1cm46IENvbXBsZXRlIGFuc3dlcmA7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlck9wdGlvbihjdXJzb3IsIHYsIGksIGFycm93SW5kaWNhdG9yKSB7XG4gICAgY29uc3QgcHJlZml4ID0gKHYuc2VsZWN0ZWQgPyBjb2xvci5ncmVlbihmaWd1cmVzLnJhZGlvT24pIDogZmlndXJlcy5yYWRpb09mZikgKyAnICcgKyBhcnJvd0luZGljYXRvciArICcgJztcbiAgICBsZXQgdGl0bGUsIGRlc2M7XG5cbiAgICBpZiAodi5kaXNhYmxlZCkge1xuICAgICAgdGl0bGUgPSBjdXJzb3IgPT09IGkgPyBjb2xvci5ncmF5KCkudW5kZXJsaW5lKHYudGl0bGUpIDogY29sb3Iuc3RyaWtldGhyb3VnaCgpLmdyYXkodi50aXRsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpdGxlID0gY3Vyc29yID09PSBpID8gY29sb3IuY3lhbigpLnVuZGVybGluZSh2LnRpdGxlKSA6IHYudGl0bGU7XG4gICAgICBpZiAoY3Vyc29yID09PSBpICYmIHYuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgZGVzYyA9IGAgLSAke3YuZGVzY3JpcHRpb259YDtcbiAgICAgICAgaWYgKHByZWZpeC5sZW5ndGggKyB0aXRsZS5sZW5ndGggKyBkZXNjLmxlbmd0aCA+PSB0aGlzLm91dC5jb2x1bW5zXG4gICAgICAgICAgfHwgdi5kZXNjcmlwdGlvbi5zcGxpdCgvXFxyP1xcbi8pLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBkZXNjID0gJ1xcbicgKyB3cmFwKHYuZGVzY3JpcHRpb24sIHsgbWFyZ2luOiBwcmVmaXgubGVuZ3RoLCB3aWR0aDogdGhpcy5vdXQuY29sdW1ucyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcmVmaXggKyB0aXRsZSArIGNvbG9yLmdyYXkoZGVzYyB8fCAnJyk7XG4gIH1cblxuICAvLyBzaGFyZWQgd2l0aCBhdXRvY29tcGxldGVNdWx0aXNlbGVjdFxuICBwYWdpbmF0ZU9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGNvbG9yLnJlZCgnTm8gbWF0Y2hlcyBmb3IgdGhpcyBxdWVyeS4nKTtcbiAgICB9XG5cbiAgICBsZXQgeyBzdGFydEluZGV4LCBlbmRJbmRleCB9ID0gZW50cmllc1RvRGlzcGxheSh0aGlzLmN1cnNvciwgb3B0aW9ucy5sZW5ndGgsIHRoaXMub3B0aW9uc1BlclBhZ2UpO1xuICAgIGxldCBwcmVmaXgsIHN0eWxlZE9wdGlvbnMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4OyBpIDwgZW5kSW5kZXg7IGkrKykge1xuICAgICAgaWYgKGkgPT09IHN0YXJ0SW5kZXggJiYgc3RhcnRJbmRleCA+IDApIHtcbiAgICAgICAgcHJlZml4ID0gZmlndXJlcy5hcnJvd1VwO1xuICAgICAgfSBlbHNlIGlmIChpID09PSBlbmRJbmRleCAtIDEgJiYgZW5kSW5kZXggPCBvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBwcmVmaXggPSBmaWd1cmVzLmFycm93RG93bjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByZWZpeCA9ICcgJztcbiAgICAgIH1cbiAgICAgIHN0eWxlZE9wdGlvbnMucHVzaCh0aGlzLnJlbmRlck9wdGlvbih0aGlzLmN1cnNvciwgb3B0aW9uc1tpXSwgaSwgcHJlZml4KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICdcXG4nICsgc3R5bGVkT3B0aW9ucy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8vIHNoYXJlZCB3aXRoIGF1dG9jb21sZXRlTXVsdGlzZWxlY3RcbiAgcmVuZGVyT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKCF0aGlzLmRvbmUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRlT3B0aW9ucyhvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcmVuZGVyRG9uZU9ySW5zdHJ1Y3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlXG4gICAgICAgIC5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKVxuICAgICAgICAubWFwKHYgPT4gdi50aXRsZSlcbiAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gW2NvbG9yLmdyYXkodGhpcy5oaW50KSwgdGhpcy5yZW5kZXJJbnN0cnVjdGlvbnMoKV07XG5cbiAgICBpZiAodGhpcy52YWx1ZVt0aGlzLmN1cnNvcl0uZGlzYWJsZWQpIHtcbiAgICAgIG91dHB1dC5wdXNoKGNvbG9yLnllbGxvdyh0aGlzLndhcm4pKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dC5qb2luKCcgJyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtcbiAgICBzdXBlci5yZW5kZXIoKTtcblxuICAgIC8vIHByaW50IHByb21wdFxuICAgIGxldCBwcm9tcHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLFxuICAgICAgY29sb3IuYm9sZCh0aGlzLm1zZyksXG4gICAgICBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLFxuICAgICAgdGhpcy5yZW5kZXJEb25lT3JJbnN0cnVjdGlvbnMoKVxuICAgIF0uam9pbignICcpO1xuICAgIGlmICh0aGlzLnNob3dNaW5FcnJvcikge1xuICAgICAgcHJvbXB0ICs9IGNvbG9yLnJlZChgWW91IG11c3Qgc2VsZWN0IGEgbWluaW11bSBvZiAke3RoaXMubWluU2VsZWN0ZWR9IGNob2ljZXMuYCk7XG4gICAgICB0aGlzLnNob3dNaW5FcnJvciA9IGZhbHNlO1xuICAgIH1cbiAgICBwcm9tcHQgKz0gdGhpcy5yZW5kZXJPcHRpb25zKHRoaXMudmFsdWUpO1xuXG4gICAgdGhpcy5vdXQud3JpdGUodGhpcy5jbGVhciArIHByb21wdCk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKHByb21wdCwgdGhpcy5vdXQuY29sdW1ucyk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNdWx0aXNlbGVjdFByb21wdDtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcbmNvbnN0IHsgZXJhc2UsIGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuY29uc3QgeyBzdHlsZSwgY2xlYXIsIGZpZ3VyZXMsIHdyYXAsIGVudHJpZXNUb0Rpc3BsYXkgfSA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcblxuY29uc3QgZ2V0VmFsID0gKGFyciwgaSkgPT4gYXJyW2ldICYmIChhcnJbaV0udmFsdWUgfHwgYXJyW2ldLnRpdGxlIHx8IGFycltpXSk7XG5jb25zdCBnZXRUaXRsZSA9IChhcnIsIGkpID0+IGFycltpXSAmJiAoYXJyW2ldLnRpdGxlIHx8IGFycltpXS52YWx1ZSB8fCBhcnJbaV0pO1xuY29uc3QgZ2V0SW5kZXggPSAoYXJyLCB2YWxPclRpdGxlKSA9PiB7XG4gIGNvbnN0IGluZGV4ID0gYXJyLmZpbmRJbmRleChlbCA9PiBlbC52YWx1ZSA9PT0gdmFsT3JUaXRsZSB8fCBlbC50aXRsZSA9PT0gdmFsT3JUaXRsZSk7XG4gIHJldHVybiBpbmRleCA+IC0xID8gaW5kZXggOiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFRleHRQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBhdXRvLWNvbXBsZXRlIGNob2ljZXMgb2JqZWN0c1xuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMuc3VnZ2VzdF0gRmlsdGVyIGZ1bmN0aW9uLiBEZWZhdWx0cyB0byBzb3J0IGJ5IHRpdGxlXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMubGltaXQ9MTBdIE1heCBudW1iZXIgb2YgcmVzdWx0cyB0byBzaG93XG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnN0eWxlPSdkZWZhdWx0J10gUmVuZGVyIHN0eWxlXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuZmFsbGJhY2tdIEZhbGxiYWNrIG1lc3NhZ2UgLSBpbml0aWFsIHRvIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbml0aWFsXSBJbmRleCBvZiB0aGUgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5jbGVhckZpcnN0XSBUaGUgZmlyc3QgRVNDQVBFIGtleXByZXNzIHdpbGwgY2xlYXIgdGhlIGlucHV0XG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5ub01hdGNoZXNdIFRoZSBubyBtYXRjaGVzIGZvdW5kIGxhYmVsXG4gKi9cbmNsYXNzIEF1dG9jb21wbGV0ZVByb21wdCBleHRlbmRzIFByb21wdCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLnN1Z2dlc3QgPSBvcHRzLnN1Z2dlc3Q7XG4gICAgdGhpcy5jaG9pY2VzID0gb3B0cy5jaG9pY2VzO1xuICAgIHRoaXMuaW5pdGlhbCA9IHR5cGVvZiBvcHRzLmluaXRpYWwgPT09ICdudW1iZXInXG4gICAgICA/IG9wdHMuaW5pdGlhbFxuICAgICAgOiBnZXRJbmRleChvcHRzLmNob2ljZXMsIG9wdHMuaW5pdGlhbCk7XG4gICAgdGhpcy5zZWxlY3QgPSB0aGlzLmluaXRpYWwgfHwgb3B0cy5jdXJzb3IgfHwgMDtcbiAgICB0aGlzLmkxOG4gPSB7IG5vTWF0Y2hlczogb3B0cy5ub01hdGNoZXMgfHwgJ25vIG1hdGNoZXMgZm91bmQnIH07XG4gICAgdGhpcy5mYWxsYmFjayA9IG9wdHMuZmFsbGJhY2sgfHwgdGhpcy5pbml0aWFsO1xuICAgIHRoaXMuY2xlYXJGaXJzdCA9IG9wdHMuY2xlYXJGaXJzdCB8fCBmYWxzZTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5pbnB1dCA9ICcnO1xuICAgIHRoaXMubGltaXQgPSBvcHRzLmxpbWl0IHx8IDEwO1xuICAgIHRoaXMuY3Vyc29yID0gMDtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHN0eWxlLnJlbmRlcihvcHRzLnN0eWxlKTtcbiAgICB0aGlzLnNjYWxlID0gdGhpcy50cmFuc2Zvcm0uc2NhbGU7XG4gICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuY29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICB0aGlzLmNvbXBsZXRlKHRoaXMucmVuZGVyKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgc2V0IGZhbGxiYWNrKGZiKSB7XG4gICAgdGhpcy5fZmIgPSBOdW1iZXIuaXNTYWZlSW50ZWdlcihwYXJzZUludChmYikpID8gcGFyc2VJbnQoZmIpIDogZmI7XG4gIH1cblxuICBnZXQgZmFsbGJhY2soKSB7XG4gICAgbGV0IGNob2ljZTtcbiAgICBpZiAodHlwZW9mIHRoaXMuX2ZiID09PSAnbnVtYmVyJylcbiAgICAgIGNob2ljZSA9IHRoaXMuY2hvaWNlc1t0aGlzLl9mYl07XG4gICAgZWxzZSBpZiAodHlwZW9mIHRoaXMuX2ZiID09PSAnc3RyaW5nJylcbiAgICAgIGNob2ljZSA9IHsgdGl0bGU6IHRoaXMuX2ZiIH07XG4gICAgcmV0dXJuIGNob2ljZSB8fCB0aGlzLl9mYiB8fCB7IHRpdGxlOiB0aGlzLmkxOG4ubm9NYXRjaGVzIH07XG4gIH1cblxuICBtb3ZlU2VsZWN0KGkpIHtcbiAgICB0aGlzLnNlbGVjdCA9IGk7XG4gICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMClcbiAgICAgIHRoaXMudmFsdWUgPSBnZXRWYWwodGhpcy5zdWdnZXN0aW9ucywgaSk7XG4gICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy5mYWxsYmFjay52YWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgfVxuXG4gIGFzeW5jIGNvbXBsZXRlKGNiKSB7XG4gICAgY29uc3QgcCA9ICh0aGlzLmNvbXBsZXRpbmcgPSB0aGlzLnN1Z2dlc3QodGhpcy5pbnB1dCwgdGhpcy5jaG9pY2VzKSk7XG4gICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSBhd2FpdCBwO1xuXG4gICAgaWYgKHRoaXMuY29tcGxldGluZyAhPT0gcCkgcmV0dXJuO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBzdWdnZXN0aW9uc1xuICAgICAgLm1hcCgocywgaSwgYXJyKSA9PiAoeyB0aXRsZTogZ2V0VGl0bGUoYXJyLCBpKSwgdmFsdWU6IGdldFZhbChhcnIsIGkpLCBkZXNjcmlwdGlvbjogcy5kZXNjcmlwdGlvbiB9KSk7XG4gICAgdGhpcy5jb21wbGV0aW5nID0gZmFsc2U7XG4gICAgY29uc3QgbCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25zLmxlbmd0aCAtIDEsIDApO1xuICAgIHRoaXMubW92ZVNlbGVjdChNYXRoLm1pbihsLCB0aGlzLnNlbGVjdCkpO1xuXG4gICAgY2IgJiYgY2IoKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuaW5wdXQgPSAnJztcbiAgICB0aGlzLmNvbXBsZXRlKCgpID0+IHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCh0aGlzLmluaXRpYWwgIT09IHZvaWQgMCA/IHRoaXMuaW5pdGlhbCA6IDApO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICBpZiAodGhpcy5jbGVhckZpcnN0ICYmIHRoaXMuaW5wdXQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvbmUgPSB0aGlzLmV4aXRlZCA9IHRydWU7IFxuICAgICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmV4aXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgIHRoaXMuYWJvcnRlZCA9IHRoaXMuZXhpdGVkID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBsZXQgczEgPSB0aGlzLmlucHV0LnNsaWNlKDAsIHRoaXMuY3Vyc29yKTtcbiAgICBsZXQgczIgPSB0aGlzLmlucHV0LnNsaWNlKHRoaXMuY3Vyc29yKTtcbiAgICB0aGlzLmlucHV0ID0gYCR7czF9JHtjfSR7czJ9YDtcbiAgICB0aGlzLmN1cnNvciA9IHMxLmxlbmd0aCsxO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSAwKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgbGV0IHMxID0gdGhpcy5pbnB1dC5zbGljZSgwLCB0aGlzLmN1cnNvci0xKTtcbiAgICBsZXQgczIgPSB0aGlzLmlucHV0LnNsaWNlKHRoaXMuY3Vyc29yKTtcbiAgICB0aGlzLmlucHV0ID0gYCR7czF9JHtzMn1gO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5jdXJzb3ItMTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlRm9yd2FyZCgpIHtcbiAgICBpZih0aGlzLmN1cnNvcip0aGlzLnNjYWxlID49IHRoaXMucmVuZGVyZWQubGVuZ3RoKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgbGV0IHMxID0gdGhpcy5pbnB1dC5zbGljZSgwLCB0aGlzLmN1cnNvcik7XG4gICAgbGV0IHMyID0gdGhpcy5pbnB1dC5zbGljZSh0aGlzLmN1cnNvcisxKTtcbiAgICB0aGlzLmlucHV0ID0gYCR7czF9JHtzMn1gO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBmaXJzdCgpIHtcbiAgICB0aGlzLm1vdmVTZWxlY3QoMCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxhc3QoKSB7XG4gICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdCA9PT0gMCkge1xuICAgICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCh0aGlzLnNlbGVjdCAtIDEpO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICBpZiAodGhpcy5zZWxlY3QgPT09IHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5tb3ZlU2VsZWN0KDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vdmVTZWxlY3QodGhpcy5zZWxlY3QgKyAxKTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ID09PSB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCAtIDEpIHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCgwKTtcbiAgICB9IGVsc2UgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc2VsZWN0ICsgMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG5leHRQYWdlKCkge1xuICAgIHRoaXMubW92ZVNlbGVjdChNYXRoLm1pbih0aGlzLnNlbGVjdCArIHRoaXMubGltaXQsIHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSkpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBwcmV2UGFnZSgpIHtcbiAgICB0aGlzLm1vdmVTZWxlY3QoTWF0aC5tYXgodGhpcy5zZWxlY3QgLSB0aGlzLmxpbWl0LCAwKSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxlZnQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yIDw9IDApIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMuY3Vyc29yLTE7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJpZ2h0KCkge1xuICAgIGlmICh0aGlzLmN1cnNvcip0aGlzLnNjYWxlID49IHRoaXMucmVuZGVyZWQubGVuZ3RoKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmN1cnNvcisxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByZW5kZXJPcHRpb24odiwgaG92ZXJlZCwgaXNTdGFydCwgaXNFbmQpIHtcbiAgICBsZXQgZGVzYztcbiAgICBsZXQgcHJlZml4ID0gaXNTdGFydCA/IGZpZ3VyZXMuYXJyb3dVcCA6IGlzRW5kID8gZmlndXJlcy5hcnJvd0Rvd24gOiAnICc7XG4gICAgbGV0IHRpdGxlID0gaG92ZXJlZCA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodi50aXRsZSkgOiB2LnRpdGxlO1xuICAgIHByZWZpeCA9IChob3ZlcmVkID8gY29sb3IuY3lhbihmaWd1cmVzLnBvaW50ZXIpICsgJyAnIDogJyAgJykgKyBwcmVmaXg7XG4gICAgaWYgKHYuZGVzY3JpcHRpb24pIHtcbiAgICAgIGRlc2MgPSBgIC0gJHt2LmRlc2NyaXB0aW9ufWA7XG4gICAgICBpZiAocHJlZml4Lmxlbmd0aCArIHRpdGxlLmxlbmd0aCArIGRlc2MubGVuZ3RoID49IHRoaXMub3V0LmNvbHVtbnNcbiAgICAgICAgfHwgdi5kZXNjcmlwdGlvbi5zcGxpdCgvXFxyP1xcbi8pLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZGVzYyA9ICdcXG4nICsgd3JhcCh2LmRlc2NyaXB0aW9uLCB7IG1hcmdpbjogMywgd2lkdGg6IHRoaXMub3V0LmNvbHVtbnMgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByZWZpeCArICcgJyArIHRpdGxlICsgY29sb3IuZ3JheShkZXNjIHx8ICcnKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5maXJzdFJlbmRlcikgdGhpcy5vdXQud3JpdGUoY3Vyc29yLmhpZGUpO1xuICAgIGVsc2UgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG5cbiAgICBsZXQgeyBzdGFydEluZGV4LCBlbmRJbmRleCB9ID0gZW50cmllc1RvRGlzcGxheSh0aGlzLnNlbGVjdCwgdGhpcy5jaG9pY2VzLmxlbmd0aCwgdGhpcy5saW1pdCk7XG5cbiAgICB0aGlzLm91dHB1dFRleHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQsIHRoaXMuZXhpdGVkKSxcbiAgICAgIGNvbG9yLmJvbGQodGhpcy5tc2cpLFxuICAgICAgc3R5bGUuZGVsaW1pdGVyKHRoaXMuY29tcGxldGluZyksXG4gICAgICB0aGlzLmRvbmUgJiYgdGhpcy5zdWdnZXN0aW9uc1t0aGlzLnNlbGVjdF1cbiAgICAgICAgPyB0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuc2VsZWN0XS50aXRsZVxuICAgICAgICA6IHRoaXMucmVuZGVyZWQgPSB0aGlzLnRyYW5zZm9ybS5yZW5kZXIodGhpcy5pbnB1dClcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIGlmICghdGhpcy5kb25lKSB7XG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHRoaXMuc3VnZ2VzdGlvbnNcbiAgICAgICAgLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KVxuICAgICAgICAubWFwKChpdGVtLCBpKSA9PiAgdGhpcy5yZW5kZXJPcHRpb24oaXRlbSxcbiAgICAgICAgICB0aGlzLnNlbGVjdCA9PT0gaSArIHN0YXJ0SW5kZXgsXG4gICAgICAgICAgaSA9PT0gMCAmJiBzdGFydEluZGV4ID4gMCxcbiAgICAgICAgICBpICsgc3RhcnRJbmRleCA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgdGhpcy5jaG9pY2VzLmxlbmd0aCkpXG4gICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICAgIHRoaXMub3V0cHV0VGV4dCArPSBgXFxuYCArIChzdWdnZXN0aW9ucyB8fCBjb2xvci5ncmF5KHRoaXMuZmFsbGJhY2sudGl0bGUpKTtcbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZShlcmFzZS5saW5lICsgY3Vyc29yLnRvKDApICsgdGhpcy5vdXRwdXRUZXh0KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEF1dG9jb21wbGV0ZVByb21wdDtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuY29uc3QgeyBjdXJzb3IgfSA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKTtcbmNvbnN0IE11bHRpc2VsZWN0UHJvbXB0ID0gcmVxdWlyZSgnLi9tdWx0aXNlbGVjdCcpO1xuY29uc3QgeyBjbGVhciwgc3R5bGUsIGZpZ3VyZXMgfSA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcbi8qKlxuICogTXVsdGlzZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLndhcm5dIEhpbnQgc2hvd24gZm9yIGRpc2FibGVkIGNob2ljZXNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXhdIE1heCBjaG9pY2VzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKi9cbmNsYXNzIEF1dG9jb21wbGV0ZU11bHRpc2VsZWN0UHJvbXB0IGV4dGVuZHMgTXVsdGlzZWxlY3RQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgb3B0cy5vdmVycmlkZVJlbmRlciA9IHRydWU7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gJyc7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxhc3QoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cbiAgbmV4dCgpIHtcbiAgICB0aGlzLmN1cnNvciA9ICh0aGlzLmN1cnNvciArIDEpICUgdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICB1cCgpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IgPT09IDApIHtcbiAgICAgIHRoaXMuY3Vyc29yID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJzb3ItLTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLmN1cnNvciA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3Vyc29yKys7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuY3Vyc29yXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByaWdodCgpIHtcbiAgICBpZiAodGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy5jdXJzb3JdLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlKCkge1xuICAgIGlmICh0aGlzLmlucHV0VmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmlucHV0VmFsdWUuc3Vic3RyKDAsIHRoaXMuaW5wdXRWYWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWRPcHRpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRmlsdGVyZWRPcHRpb25zKCkge1xuICAgIGNvbnN0IGN1cnJlbnRIaWdobGlnaHQgPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmN1cnNvcl07XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLnZhbHVlXG4gICAgICAuZmlsdGVyKHYgPT4ge1xuICAgICAgICBpZiAodGhpcy5pbnB1dFZhbHVlKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2LnRpdGxlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKHYudGl0bGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmlucHV0VmFsdWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2Ygdi52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICh2LnZhbHVlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5pbnB1dFZhbHVlLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICBjb25zdCBuZXdIaWdobGlnaHRJbmRleCA9IHRoaXMuZmlsdGVyZWRPcHRpb25zLmZpbmRJbmRleCh2ID0+IHYgPT09IGN1cnJlbnRIaWdobGlnaHQpXG4gICAgdGhpcy5jdXJzb3IgPSBuZXdIaWdobGlnaHRJbmRleCA8IDAgPyAwIDogbmV3SGlnaGxpZ2h0SW5kZXg7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGhhbmRsZVNwYWNlVG9nZ2xlKCkge1xuICAgIGNvbnN0IHYgPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmN1cnNvcl07XG5cbiAgICBpZiAodi5zZWxlY3RlZCkge1xuICAgICAgdi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9IGVsc2UgaWYgKHYuZGlzYWJsZWQgfHwgdGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHYuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVJbnB1dENoYW5nZShjKSB7XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5pbnB1dFZhbHVlICsgYztcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmVkT3B0aW9ucygpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYyA9PT0gJyAnKSB7XG4gICAgICB0aGlzLmhhbmRsZVNwYWNlVG9nZ2xlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2UoYyk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmluc3RydWN0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuaW5zdHJ1Y3Rpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnN0cnVjdGlvbnM7XG4gICAgICB9XG4gICAgICByZXR1cm4gYFxuSW5zdHJ1Y3Rpb25zOlxuICAgICR7ZmlndXJlcy5hcnJvd1VwfS8ke2ZpZ3VyZXMuYXJyb3dEb3dufTogSGlnaGxpZ2h0IG9wdGlvblxuICAgICR7ZmlndXJlcy5hcnJvd0xlZnR9LyR7ZmlndXJlcy5hcnJvd1JpZ2h0fS9bc3BhY2VdOiBUb2dnbGUgc2VsZWN0aW9uXG4gICAgW2EsYixjXS9kZWxldGU6IEZpbHRlciBjaG9pY2VzXG4gICAgZW50ZXIvcmV0dXJuOiBDb21wbGV0ZSBhbnN3ZXJcbmA7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlckN1cnJlbnRJbnB1dCgpIHtcbiAgICByZXR1cm4gYFxuRmlsdGVyZWQgcmVzdWx0cyBmb3I6ICR7dGhpcy5pbnB1dFZhbHVlID8gdGhpcy5pbnB1dFZhbHVlIDogY29sb3IuZ3JheSgnRW50ZXIgc29tZXRoaW5nIHRvIGZpbHRlcicpfVxcbmA7XG4gIH1cblxuICByZW5kZXJPcHRpb24oY3Vyc29yLCB2LCBpKSB7XG4gICAgbGV0IHRpdGxlO1xuICAgIGlmICh2LmRpc2FibGVkKSB0aXRsZSA9IGN1cnNvciA9PT0gaSA/IGNvbG9yLmdyYXkoKS51bmRlcmxpbmUodi50aXRsZSkgOiBjb2xvci5zdHJpa2V0aHJvdWdoKCkuZ3JheSh2LnRpdGxlKTtcbiAgICBlbHNlIHRpdGxlID0gY3Vyc29yID09PSBpID8gY29sb3IuY3lhbigpLnVuZGVybGluZSh2LnRpdGxlKSA6IHYudGl0bGU7XG4gICAgcmV0dXJuICh2LnNlbGVjdGVkID8gY29sb3IuZ3JlZW4oZmlndXJlcy5yYWRpb09uKSA6IGZpZ3VyZXMucmFkaW9PZmYpICsgJyAgJyArIHRpdGxlXG4gIH1cblxuICByZW5kZXJEb25lT3JJbnN0cnVjdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgICAgICAgLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpXG4gICAgICAgIC5tYXAodiA9PiB2LnRpdGxlKVxuICAgICAgICAuam9pbignLCAnKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQgPSBbY29sb3IuZ3JheSh0aGlzLmhpbnQpLCB0aGlzLnJlbmRlckluc3RydWN0aW9ucygpLCB0aGlzLnJlbmRlckN1cnJlbnRJbnB1dCgpXTtcblxuICAgIGlmICh0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggJiYgdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy5jdXJzb3JdLmRpc2FibGVkKSB7XG4gICAgICBvdXRwdXQucHVzaChjb2xvci55ZWxsb3codGhpcy53YXJuKSk7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQuam9pbignICcpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG5cbiAgICAvLyBwcmludCBwcm9tcHRcblxuICAgIGxldCBwcm9tcHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLFxuICAgICAgY29sb3IuYm9sZCh0aGlzLm1zZyksXG4gICAgICBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLFxuICAgICAgdGhpcy5yZW5kZXJEb25lT3JJbnN0cnVjdGlvbnMoKVxuICAgIF0uam9pbignICcpO1xuXG4gICAgaWYgKHRoaXMuc2hvd01pbkVycm9yKSB7XG4gICAgICBwcm9tcHQgKz0gY29sb3IucmVkKGBZb3UgbXVzdCBzZWxlY3QgYSBtaW5pbXVtIG9mICR7dGhpcy5taW5TZWxlY3RlZH0gY2hvaWNlcy5gKTtcbiAgICAgIHRoaXMuc2hvd01pbkVycm9yID0gZmFsc2U7XG4gICAgfVxuICAgIHByb21wdCArPSB0aGlzLnJlbmRlck9wdGlvbnModGhpcy5maWx0ZXJlZE9wdGlvbnMpO1xuXG4gICAgdGhpcy5vdXQud3JpdGUodGhpcy5jbGVhciArIHByb21wdCk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKHByb21wdCwgdGhpcy5vdXQuY29sdW1ucyk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdDtcbiIsImNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcbmNvbnN0IFByb21wdCA9IHJlcXVpcmUoJy4vcHJvbXB0Jyk7XG5jb25zdCB7IHN0eWxlLCBjbGVhciB9ID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xuY29uc3QgeyBlcmFzZSwgY3Vyc29yIH0gPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyk7XG5cbi8qKlxuICogQ29uZmlybVByb21wdCBCYXNlIEVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLm1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5pbml0aWFsXSBEZWZhdWx0IHZhbHVlICh0cnVlL2ZhbHNlKVxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMueWVzXSBUaGUgXCJZZXNcIiBsYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnllc09wdGlvbl0gVGhlIFwiWWVzXCIgb3B0aW9uIHdoZW4gY2hvb3NpbmcgYmV0d2VlbiB5ZXMvbm9cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5ub10gVGhlIFwiTm9cIiBsYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm5vT3B0aW9uXSBUaGUgXCJOb1wiIG9wdGlvbiB3aGVuIGNob29zaW5nIGJldHdlZW4geWVzL25vXG4gKi9cbmNsYXNzIENvbmZpcm1Qcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy52YWx1ZSA9IG9wdHMuaW5pdGlhbDtcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9ICEhb3B0cy5pbml0aWFsO1xuICAgIHRoaXMueWVzTXNnID0gb3B0cy55ZXMgfHwgJ3llcyc7XG4gICAgdGhpcy55ZXNPcHRpb24gPSBvcHRzLnllc09wdGlvbiB8fCAnKFkvbiknO1xuICAgIHRoaXMubm9Nc2cgPSBvcHRzLm5vIHx8ICdubyc7XG4gICAgdGhpcy5ub09wdGlvbiA9IG9wdHMubm9PcHRpb24gfHwgJyh5L04pJztcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuaW5pdGlhbFZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuZG9uZSA9IHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlIHx8IGZhbHNlO1xuICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYy50b0xvd2VyQ2FzZSgpID09PSAneScpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0KCk7XG4gICAgfVxuICAgIGlmIChjLnRvTG93ZXJDYXNlKCkgPT09ICduJykge1xuICAgICAgdGhpcy52YWx1ZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5maXJzdFJlbmRlcikgdGhpcy5vdXQud3JpdGUoY3Vyc29yLmhpZGUpO1xuICAgIGVsc2UgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG5cbiAgICB0aGlzLm91dHB1dFRleHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLFxuICAgICAgY29sb3IuYm9sZCh0aGlzLm1zZyksXG4gICAgICBzdHlsZS5kZWxpbWl0ZXIodGhpcy5kb25lKSxcbiAgICAgIHRoaXMuZG9uZSA/ICh0aGlzLnZhbHVlID8gdGhpcy55ZXNNc2cgOiB0aGlzLm5vTXNnKVxuICAgICAgICAgIDogY29sb3IuZ3JheSh0aGlzLmluaXRpYWxWYWx1ZSA/IHRoaXMueWVzT3B0aW9uIDogdGhpcy5ub09wdGlvbilcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29uZmlybVByb21wdDtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFRleHRQcm9tcHQ6IHJlcXVpcmUoJy4vdGV4dCcpLFxuICBTZWxlY3RQcm9tcHQ6IHJlcXVpcmUoJy4vc2VsZWN0JyksXG4gIFRvZ2dsZVByb21wdDogcmVxdWlyZSgnLi90b2dnbGUnKSxcbiAgRGF0ZVByb21wdDogcmVxdWlyZSgnLi9kYXRlJyksXG4gIE51bWJlclByb21wdDogcmVxdWlyZSgnLi9udW1iZXInKSxcbiAgTXVsdGlzZWxlY3RQcm9tcHQ6IHJlcXVpcmUoJy4vbXVsdGlzZWxlY3QnKSxcbiAgQXV0b2NvbXBsZXRlUHJvbXB0OiByZXF1aXJlKCcuL2F1dG9jb21wbGV0ZScpLFxuICBBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdDogcmVxdWlyZSgnLi9hdXRvY29tcGxldGVNdWx0aXNlbGVjdCcpLFxuICBDb25maXJtUHJvbXB0OiByZXF1aXJlKCcuL2NvbmZpcm0nKVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0ICQgPSBleHBvcnRzO1xuY29uc3QgZWwgPSByZXF1aXJlKCcuL2VsZW1lbnRzJyk7XG5jb25zdCBub29wID0gdiA9PiB2O1xuXG5mdW5jdGlvbiB0b1Byb21wdCh0eXBlLCBhcmdzLCBvcHRzPXt9KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICBjb25zdCBwID0gbmV3IGVsW3R5cGVdKGFyZ3MpO1xuICAgIGNvbnN0IG9uQWJvcnQgPSBvcHRzLm9uQWJvcnQgfHwgbm9vcDtcbiAgICBjb25zdCBvblN1Ym1pdCA9IG9wdHMub25TdWJtaXQgfHwgbm9vcDtcbiAgICBjb25zdCBvbkV4aXQgPSBvcHRzLm9uRXhpdCB8fCBub29wO1xuICAgIHAub24oJ3N0YXRlJywgYXJncy5vblN0YXRlIHx8IG5vb3ApO1xuICAgIHAub24oJ3N1Ym1pdCcsIHggPT4gcmVzKG9uU3VibWl0KHgpKSk7XG4gICAgcC5vbignZXhpdCcsIHggPT4gcmVzKG9uRXhpdCh4KSkpO1xuICAgIHAub24oJ2Fib3J0JywgeCA9PiByZWoob25BYm9ydCh4KSkpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUZXh0IHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5zdHlsZT1cImRlZmF1bHRcIl0gUmVuZGVyIHN0eWxlICgnZGVmYXVsdCcsICdwYXNzd29yZCcsICdpbnZpc2libGUnKVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC50ZXh0ID0gYXJncyA9PiB0b1Byb21wdCgnVGV4dFByb21wdCcsIGFyZ3MpO1xuXG4vKipcbiAqIFBhc3N3b3JkIHByb21wdCB3aXRoIG1hc2tlZCBpbnB1dFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cbiQucGFzc3dvcmQgPSBhcmdzID0+IHtcbiAgYXJncy5zdHlsZSA9ICdwYXNzd29yZCc7XG4gIHJldHVybiAkLnRleHQoYXJncyk7XG59O1xuXG4vKipcbiAqIFByb21wdCB3aGVyZSBpbnB1dCBpcyBpbnZpc2libGUsIGxpa2Ugc3Vkb1xuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cbiQuaW52aXNpYmxlID0gYXJncyA9PiB7XG4gIGFyZ3Muc3R5bGUgPSAnaW52aXNpYmxlJztcbiAgcmV0dXJuICQudGV4dChhcmdzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge251bWJlcn0gYXJncy5pbml0aWFsIERlZmF1bHQgbnVtYmVyIHZhbHVlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5tYXhdIE1heCB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1pbl0gTWluIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3R5bGU9XCJkZWZhdWx0XCJdIFJlbmRlciBzdHlsZSAoJ2RlZmF1bHQnLCAncGFzc3dvcmQnLCAnaW52aXNpYmxlJylcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuZmxvYXQ9ZmFsc2VdIFBhcnNlIGlucHV0IGFzIGZsb2F0c1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnJvdW5kPTJdIFJvdW5kIGZsb2F0cyB0byB4IGRlY2ltYWxzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5jcmVtZW50PTFdIE51bWJlciB0byBpbmNyZW1lbnQgYnkgd2hlbiB1c2luZyBhcnJvdy1rZXlzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5udW1iZXIgPSBhcmdzID0+IHRvUHJvbXB0KCdOdW1iZXJQcm9tcHQnLCBhcmdzKTtcblxuLyoqXG4gKiBEYXRlIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge251bWJlcn0gYXJncy5pbml0aWFsIERlZmF1bHQgbnVtYmVyIHZhbHVlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5tYXhdIE1heCB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1pbl0gTWluIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3R5bGU9XCJkZWZhdWx0XCJdIFJlbmRlciBzdHlsZSAoJ2RlZmF1bHQnLCAncGFzc3dvcmQnLCAnaW52aXNpYmxlJylcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuZmxvYXQ9ZmFsc2VdIFBhcnNlIGlucHV0IGFzIGZsb2F0c1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnJvdW5kPTJdIFJvdW5kIGZsb2F0cyB0byB4IGRlY2ltYWxzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5jcmVtZW50PTFdIE51bWJlciB0byBpbmNyZW1lbnQgYnkgd2hlbiB1c2luZyBhcnJvdy1rZXlzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5kYXRlID0gYXJncyA9PiB0b1Byb21wdCgnRGF0ZVByb21wdCcsIGFyZ3MpO1xuXG4vKipcbiAqIENsYXNzaWMgeWVzL25vIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmluaXRpYWw9ZmFsc2VdIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5jb25maXJtID0gYXJncyA9PiB0b1Byb21wdCgnQ29uZmlybVByb21wdCcsIGFyZ3MpO1xuXG4vKipcbiAqIExpc3QgcHJvbXB0LCBzcGxpdCBpbnRwdXQgc3RyaW5nIGJ5IGBzZXBlcmF0b3JgXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5pbml0aWFsXSBEZWZhdWx0IHN0cmluZyB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnN0eWxlPVwiZGVmYXVsdFwiXSBSZW5kZXIgc3R5bGUgKCdkZWZhdWx0JywgJ3Bhc3N3b3JkJywgJ2ludmlzaWJsZScpXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc2VwYXJhdG9yXSBTdHJpbmcgc2VwYXJhdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0LCBpbiBmb3JtIG9mIGFuIGBBcnJheWBcbiAqL1xuJC5saXN0ID0gYXJncyA9PiB7XG4gIGNvbnN0IHNlcCA9IGFyZ3Muc2VwYXJhdG9yIHx8ICcsJztcbiAgcmV0dXJuIHRvUHJvbXB0KCdUZXh0UHJvbXB0JywgYXJncywge1xuICAgIG9uU3VibWl0OiBzdHIgPT4gc3RyLnNwbGl0KHNlcCkubWFwKHMgPT4gcy50cmltKCkpXG4gIH0pO1xufTtcblxuLyoqXG4gKiBUb2dnbGUvc3dpdGNoIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmluaXRpYWw9ZmFsc2VdIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5hY3RpdmU9XCJvblwiXSBUZXh0IGZvciBgYWN0aXZlYCBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmluYWN0aXZlPVwib2ZmXCJdIFRleHQgZm9yIGBpbmFjdGl2ZWAgc3RhdGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC50b2dnbGUgPSBhcmdzID0+IHRvUHJvbXB0KCdUb2dnbGVQcm9tcHQnLCBhcmdzKTtcblxuLyoqXG4gKiBJbnRlcmFjdGl2ZSBzZWxlY3QgcHJvbXB0XG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2VzIG9iamVjdHMgYFt7IHRpdGxlLCB2YWx1ZSB9LCAuLi5dYFxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLmluaXRpYWxdIEluZGV4IG9mIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbYXJncy5oaW50XSBIaW50IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5zZWxlY3QgPSBhcmdzID0+IHRvUHJvbXB0KCdTZWxlY3RQcm9tcHQnLCBhcmdzKTtcblxuLyoqXG4gKiBJbnRlcmFjdGl2ZSBtdWx0aS1zZWxlY3QgLyBhdXRvY29tcGxldGVNdWx0aXNlbGVjdCBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtBcnJheX0gYXJncy5jaG9pY2VzIEFycmF5IG9mIGNob2ljZXMgb2JqZWN0cyBgW3sgdGl0bGUsIHZhbHVlLCBbc2VsZWN0ZWRdIH0sIC4uLl1gXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MubWF4XSBNYXggc2VsZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaGludF0gSGludCB0byBkaXNwbGF5IHVzZXJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbYXJncy5jdXJzb3I9MF0gQ3Vyc29yIHN0YXJ0IHBvc2l0aW9uXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cbiQubXVsdGlzZWxlY3QgPSBhcmdzID0+IHtcbiAgYXJncy5jaG9pY2VzID0gW10uY29uY2F0KGFyZ3MuY2hvaWNlcyB8fCBbXSk7XG4gIGNvbnN0IHRvU2VsZWN0ZWQgPSBpdGVtcyA9PiBpdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnNlbGVjdGVkKS5tYXAoaXRlbSA9PiBpdGVtLnZhbHVlKTtcbiAgcmV0dXJuIHRvUHJvbXB0KCdNdWx0aXNlbGVjdFByb21wdCcsIGFyZ3MsIHtcbiAgICBvbkFib3J0OiB0b1NlbGVjdGVkLFxuICAgIG9uU3VibWl0OiB0b1NlbGVjdGVkXG4gIH0pO1xufTtcblxuJC5hdXRvY29tcGxldGVNdWx0aXNlbGVjdCA9IGFyZ3MgPT4ge1xuICBhcmdzLmNob2ljZXMgPSBbXS5jb25jYXQoYXJncy5jaG9pY2VzIHx8IFtdKTtcbiAgY29uc3QgdG9TZWxlY3RlZCA9IGl0ZW1zID0+IGl0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0uc2VsZWN0ZWQpLm1hcChpdGVtID0+IGl0ZW0udmFsdWUpO1xuICByZXR1cm4gdG9Qcm9tcHQoJ0F1dG9jb21wbGV0ZU11bHRpc2VsZWN0UHJvbXB0JywgYXJncywge1xuICAgIG9uQWJvcnQ6IHRvU2VsZWN0ZWQsXG4gICAgb25TdWJtaXQ6IHRvU2VsZWN0ZWRcbiAgfSk7XG59O1xuXG5jb25zdCBieVRpdGxlID0gKGlucHV0LCBjaG9pY2VzKSA9PiBQcm9taXNlLnJlc29sdmUoXG4gIGNob2ljZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS50aXRsZS5zbGljZSgwLCBpbnB1dC5sZW5ndGgpLnRvTG93ZXJDYXNlKCkgPT09IGlucHV0LnRvTG93ZXJDYXNlKCkpXG4pO1xuXG4vKipcbiAqIEludGVyYWN0aXZlIGF1dG8tY29tcGxldGUgcHJvbXB0XG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MuY2hvaWNlcyBBcnJheSBvZiBhdXRvLWNvbXBsZXRlIGNob2ljZXMgb2JqZWN0cyBgW3sgdGl0bGUsIHZhbHVlIH0sIC4uLl1gXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbYXJncy5zdWdnZXN0XSBGdW5jdGlvbiB0byBmaWx0ZXIgcmVzdWx0cyBiYXNlZCBvbiB1c2VyIGlucHV0LiBEZWZhdWx0cyB0byBzb3J0IGJ5IGB0aXRsZWBcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5saW1pdD0xMF0gTWF4IG51bWJlciBvZiByZXN1bHRzIHRvIHNob3dcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5zdHlsZT1cImRlZmF1bHRcIl0gUmVuZGVyIHN0eWxlICgnZGVmYXVsdCcsICdwYXNzd29yZCcsICdpbnZpc2libGUnKVxuICogQHBhcmFtIHtTdHJpbmd9IFthcmdzLmluaXRpYWxdIEluZGV4IG9mIHRoZSBkZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmNsZWFyRmlyc3RdIFRoZSBmaXJzdCBFU0NBUEUga2V5cHJlc3Mgd2lsbCBjbGVhciB0aGUgaW5wdXRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbYXJncy5mYWxsYmFja10gRmFsbGJhY2sgbWVzc2FnZSAtIGRlZmF1bHRzIHRvIGluaXRpYWwgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5hdXRvY29tcGxldGUgPSBhcmdzID0+IHtcbiAgYXJncy5zdWdnZXN0ID0gYXJncy5zdWdnZXN0IHx8IGJ5VGl0bGU7XG4gIGFyZ3MuY2hvaWNlcyA9IFtdLmNvbmNhdChhcmdzLmNob2ljZXMgfHwgW10pO1xuICByZXR1cm4gdG9Qcm9tcHQoJ0F1dG9jb21wbGV0ZVByb21wdCcsIGFyZ3MpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgcHJvbXB0cyA9IHJlcXVpcmUoJy4vcHJvbXB0cycpO1xuXG5jb25zdCBwYXNzT24gPSBbJ3N1Z2dlc3QnLCAnZm9ybWF0JywgJ29uU3RhdGUnLCAndmFsaWRhdGUnLCAnb25SZW5kZXInLCAndHlwZSddO1xuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG4vKipcbiAqIFByb21wdCBmb3IgYSBzZXJpZXMgb2YgcXVlc3Rpb25zXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gcXVlc3Rpb25zIFNpbmdsZSBxdWVzdGlvbiBvYmplY3Qgb3IgQXJyYXkgb2YgcXVlc3Rpb24gb2JqZWN0c1xuICogQHBhcmFtIHtGdW5jdGlvbn0gW29uU3VibWl0XSBDYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgb24gcHJvbXB0IHN1Ym1pdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29uQ2FuY2VsXSBDYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgb24gY2FuY2VsL2Fib3J0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBPYmplY3Qgd2l0aCB2YWx1ZXMgZnJvbSB1c2VyIGlucHV0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb21wdChxdWVzdGlvbnM9W10sIHsgb25TdWJtaXQ9bm9vcCwgb25DYW5jZWw9bm9vcCB9PXt9KSB7XG4gIGNvbnN0IGFuc3dlcnMgPSB7fTtcbiAgY29uc3Qgb3ZlcnJpZGUgPSBwcm9tcHQuX292ZXJyaWRlIHx8IHt9O1xuICBxdWVzdGlvbnMgPSBbXS5jb25jYXQocXVlc3Rpb25zKTtcbiAgbGV0IGFuc3dlciwgcXVlc3Rpb24sIHF1aXQsIG5hbWUsIHR5cGUsIGxhc3RQcm9tcHQ7XG5cbiAgY29uc3QgZ2V0Rm9ybWF0dGVkQW5zd2VyID0gYXN5bmMgKHF1ZXN0aW9uLCBhbnN3ZXIsIHNraXBWYWxpZGF0aW9uID0gZmFsc2UpID0+IHtcbiAgICBpZiAoIXNraXBWYWxpZGF0aW9uICYmIHF1ZXN0aW9uLnZhbGlkYXRlICYmIHF1ZXN0aW9uLnZhbGlkYXRlKGFuc3dlcikgIT09IHRydWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXN0aW9uLmZvcm1hdCA/IGF3YWl0IHF1ZXN0aW9uLmZvcm1hdChhbnN3ZXIsIGFuc3dlcnMpIDogYW5zd2VyXG4gIH07XG5cbiAgZm9yIChxdWVzdGlvbiBvZiBxdWVzdGlvbnMpIHtcbiAgICAoeyBuYW1lLCB0eXBlIH0gPSBxdWVzdGlvbik7XG5cbiAgICAvLyBldmFsdWF0ZSB0eXBlIGZpcnN0IGFuZCBza2lwIGlmIHR5cGUgaXMgYSBmYWxzeSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdHlwZSA9IGF3YWl0IHR5cGUoYW5zd2VyLCB7IC4uLmFuc3dlcnMgfSwgcXVlc3Rpb24pXG4gICAgICBxdWVzdGlvblsndHlwZSddID0gdHlwZVxuICAgIH1cbiAgICBpZiAoIXR5cGUpIGNvbnRpbnVlO1xuXG4gICAgLy8gaWYgcHJvcGVydHkgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IHVubGVzcyBpdCdzIGEgc3BlY2lhbCBmdW5jdGlvblxuICAgIGZvciAobGV0IGtleSBpbiBxdWVzdGlvbikge1xuICAgICAgaWYgKHBhc3NPbi5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTtcbiAgICAgIGxldCB2YWx1ZSA9IHF1ZXN0aW9uW2tleV07XG4gICAgICBxdWVzdGlvbltrZXldID0gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gYXdhaXQgdmFsdWUoYW5zd2VyLCB7IC4uLmFuc3dlcnMgfSwgbGFzdFByb21wdCkgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICBsYXN0UHJvbXB0ID0gcXVlc3Rpb247XG5cbiAgICBpZiAodHlwZW9mIHF1ZXN0aW9uLm1lc3NhZ2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb21wdCBtZXNzYWdlIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIHZhcnMgaW4gY2FzZSB0aGV5IGNoYW5nZWRcbiAgICAoeyBuYW1lLCB0eXBlIH0gPSBxdWVzdGlvbik7XG5cbiAgICBpZiAocHJvbXB0c1t0eXBlXSA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHByb21wdCB0eXBlICgke3R5cGV9KSBpcyBub3QgZGVmaW5lZGApO1xuICAgIH1cblxuICAgIGlmIChvdmVycmlkZVtxdWVzdGlvbi5uYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhbnN3ZXIgPSBhd2FpdCBnZXRGb3JtYXR0ZWRBbnN3ZXIocXVlc3Rpb24sIG92ZXJyaWRlW3F1ZXN0aW9uLm5hbWVdKTtcbiAgICAgIGlmIChhbnN3ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhbnN3ZXJzW25hbWVdID0gYW5zd2VyO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gR2V0IHRoZSBpbmplY3RlZCBhbnN3ZXIgaWYgdGhlcmUgaXMgb25lIG9yIHByb21wdCB0aGUgdXNlclxuICAgICAgYW5zd2VyID0gcHJvbXB0Ll9pbmplY3RlZCA/IGdldEluamVjdGVkQW5zd2VyKHByb21wdC5faW5qZWN0ZWQsIHF1ZXN0aW9uLmluaXRpYWwpIDogYXdhaXQgcHJvbXB0c1t0eXBlXShxdWVzdGlvbik7XG4gICAgICBhbnN3ZXJzW25hbWVdID0gYW5zd2VyID0gYXdhaXQgZ2V0Rm9ybWF0dGVkQW5zd2VyKHF1ZXN0aW9uLCBhbnN3ZXIsIHRydWUpO1xuICAgICAgcXVpdCA9IGF3YWl0IG9uU3VibWl0KHF1ZXN0aW9uLCBhbnN3ZXIsIGFuc3dlcnMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcXVpdCA9ICEoYXdhaXQgb25DYW5jZWwocXVlc3Rpb24sIGFuc3dlcnMpKTtcbiAgICB9XG5cbiAgICBpZiAocXVpdCkgcmV0dXJuIGFuc3dlcnM7XG4gIH1cblxuICByZXR1cm4gYW5zd2Vycztcbn1cblxuZnVuY3Rpb24gZ2V0SW5qZWN0ZWRBbnN3ZXIoaW5qZWN0ZWQsIGRlYWZ1bHRWYWx1ZSkge1xuICBjb25zdCBhbnN3ZXIgPSBpbmplY3RlZC5zaGlmdCgpO1xuICAgIGlmIChhbnN3ZXIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgdGhyb3cgYW5zd2VyO1xuICAgIH1cblxuICAgIHJldHVybiAoYW5zd2VyID09PSB1bmRlZmluZWQpID8gZGVhZnVsdFZhbHVlIDogYW5zd2VyO1xufVxuXG5mdW5jdGlvbiBpbmplY3QoYW5zd2Vycykge1xuICBwcm9tcHQuX2luamVjdGVkID0gKHByb21wdC5faW5qZWN0ZWQgfHwgW10pLmNvbmNhdChhbnN3ZXJzKTtcbn1cblxuZnVuY3Rpb24gb3ZlcnJpZGUoYW5zd2Vycykge1xuICBwcm9tcHQuX292ZXJyaWRlID0gT2JqZWN0LmFzc2lnbih7fSwgYW5zd2Vycyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbihwcm9tcHQsIHsgcHJvbXB0LCBwcm9tcHRzLCBpbmplY3QsIG92ZXJyaWRlIH0pO1xuIiwiZnVuY3Rpb24gaXNOb2RlTFQodGFyKSB7XG4gIHRhciA9IChBcnJheS5pc0FycmF5KHRhcikgPyB0YXIgOiB0YXIuc3BsaXQoJy4nKSkubWFwKE51bWJlcik7XG4gIGxldCBpPTAsIHNyYz1wcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKS5tYXAoTnVtYmVyKTtcbiAgZm9yICg7IGkgPCB0YXIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3JjW2ldID4gdGFyW2ldKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRhcltpXSA+IHNyY1tpXSkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9XG4gIGlzTm9kZUxUKCc4LjYuMCcpXG4gICAgPyByZXF1aXJlKCcuL2Rpc3QvaW5kZXguanMnKVxuICAgIDogcmVxdWlyZSgnLi9saWIvaW5kZXguanMnKTtcbiIsIi8qKlxuICogQGRlc2NyaXB0aW9uIEVudW0gZm9yIGxvZyBsZXZlbHMuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGRpZmZlcmVudCBsZXZlbHMgb2YgbG9nZ2luZyBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICogQGVudW0ge3N0cmluZ31cbiAqIEBtZW1iZXJPZiBAZGVjYWYtdHMvdXRpbHNcbiAqL1xuZXhwb3J0IHZhciBMb2dMZXZlbDtcbihmdW5jdGlvbiAoTG9nTGV2ZWwpIHtcbiAgICAvKiogRXJyb3IgZXZlbnRzIHRoYXQgYXJlIGxpa2VseSB0byBjYXVzZSBwcm9ibGVtcy4gKi9cbiAgICBMb2dMZXZlbFtcImVycm9yXCJdID0gXCJlcnJvclwiO1xuICAgIC8qKiBSb3V0aW5lIGluZm9ybWF0aW9uLCBzdWNoIGFzIG9uZ29pbmcgc3RhdHVzIG9yIHBlcmZvcm1hbmNlLiAqL1xuICAgIExvZ0xldmVsW1wiaW5mb1wiXSA9IFwiaW5mb1wiO1xuICAgIC8qKiBBZGRpdGlvbmFsIHJlbGV2YW50IGluZm9ybWF0aW9uLiAqL1xuICAgIExvZ0xldmVsW1widmVyYm9zZVwiXSA9IFwidmVyYm9zZVwiO1xuICAgIC8qKiBEZWJ1ZyBvciB0cmFjZSBpbmZvcm1hdGlvbi4gKi9cbiAgICBMb2dMZXZlbFtcImRlYnVnXCJdID0gXCJkZWJ1Z1wiO1xuICAgIC8qKiB3YXkgdG9vIHZlcmJvc2Ugb3Igc2lsbHkgaW5mb3JtYXRpb24uICovXG4gICAgTG9nTGV2ZWxbXCJzaWxseVwiXSA9IFwic2lsbHlcIjtcbn0pKExvZ0xldmVsIHx8IChMb2dMZXZlbCA9IHt9KSk7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBOdW1lcmljIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggbG9nIGxldmVscy5cbiAqIEBzdW1tYXJ5IFByb3ZpZGVzIGEgbnVtZXJpYyByZXByZXNlbnRhdGlvbiBvZiBsb2cgbGV2ZWxzIGZvciBjb21wYXJpc29uIGFuZCBmaWx0ZXJpbmcuXG4gKiBAY29uc3Qge09iamVjdH0gTnVtZXJpY0xvZ0xldmVsc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGVycm9yIC0gTnVtZXJpYyB2YWx1ZSBmb3IgZXJyb3IgbGV2ZWwgKDApLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGluZm8gLSBOdW1lcmljIHZhbHVlIGZvciBpbmZvIGxldmVsICgyKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB2ZXJib3NlIC0gTnVtZXJpYyB2YWx1ZSBmb3IgdmVyYm9zZSBsZXZlbCAoNCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gZGVidWcgLSBOdW1lcmljIHZhbHVlIGZvciBkZWJ1ZyBsZXZlbCAoNSkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gc2lsbHkgLSBOdW1lcmljIHZhbHVlIGZvciBzaWxseSBsZXZlbCAoOCkuXG4gKiBAbWVtYmVyT2YgQGRlY2FmLXRzL3V0aWxzXG4gKi9cbmV4cG9ydCBjb25zdCBOdW1lcmljTG9nTGV2ZWxzID0ge1xuICAgIGVycm9yOiAyLFxuICAgIGluZm86IDQsXG4gICAgdmVyYm9zZTogNixcbiAgICBkZWJ1ZzogNyxcbiAgICBzaWxseTogOSxcbn07XG5leHBvcnQgdmFyIExvZ2dpbmdNb2RlO1xuKGZ1bmN0aW9uIChMb2dnaW5nTW9kZSkge1xuICAgIExvZ2dpbmdNb2RlW1wiUkFXXCJdID0gXCJyYXdcIjtcbiAgICBMb2dnaW5nTW9kZVtcIkpTT05cIl0gPSBcImpzb25cIjtcbn0pKExvZ2dpbmdNb2RlIHx8IChMb2dnaW5nTW9kZSA9IHt9KSk7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZhdWx0IHRoZW1lIGZvciBzdHlsaW5nIGxvZyBvdXRwdXQuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBkZWZhdWx0IGNvbG9yIGFuZCBzdHlsZSBzZXR0aW5ncyBmb3IgdmFyaW91cyBjb21wb25lbnRzIG9mIGxvZyBtZXNzYWdlcy5cbiAqIEBjb25zdCBEZWZhdWx0VGhlbWVcbiAqIEB0eXBlZGVmIHtUaGVtZX0gRGVmYXVsdFRoZW1lXG4gKiBAcHJvcGVydHkge09iamVjdH0gY2xhc3MgLSBTdHlsaW5nIGZvciBjbGFzcyBuYW1lcy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjbGFzcy5mZyAtIEZvcmVncm91bmQgY29sb3IgY29kZSBmb3IgY2xhc3MgbmFtZXMgKDQpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGlkIC0gU3R5bGluZyBmb3IgaWRlbnRpZmllcnMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gaWQuZmcgLSBGb3JlZ3JvdW5kIGNvbG9yIGNvZGUgZm9yIGlkZW50aWZpZXJzICgzNikuXG4gKiBAcHJvcGVydHkge09iamVjdH0gc3RhY2sgLSBTdHlsaW5nIGZvciBzdGFjayB0cmFjZXMgKGVtcHR5IG9iamVjdCkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gdGltZXN0YW1wIC0gU3R5bGluZyBmb3IgdGltZXN0YW1wcyAoZW1wdHkgb2JqZWN0KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBtZXNzYWdlIC0gU3R5bGluZyBmb3IgZGlmZmVyZW50IHR5cGVzIG9mIG1lc3NhZ2VzLlxuICogQHByb3BlcnR5IHtPYmplY3R9IG1lc3NhZ2UuZXJyb3IgLSBTdHlsaW5nIGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtZXNzYWdlLmVycm9yLmZnIC0gRm9yZWdyb3VuZCBjb2xvciBjb2RlIGZvciBlcnJvciBtZXNzYWdlcyAoMzQpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IG1ldGhvZCAtIFN0eWxpbmcgZm9yIG1ldGhvZCBuYW1lcyAoZW1wdHkgb2JqZWN0KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsb2dMZXZlbCAtIFN0eWxpbmcgZm9yIGRpZmZlcmVudCBsb2cgbGV2ZWxzLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGxvZ0xldmVsLmVycm9yIC0gU3R5bGluZyBmb3IgZXJyb3IgbGV2ZWwgbG9ncy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsb2dMZXZlbC5lcnJvci5mZyAtIEZvcmVncm91bmQgY29sb3IgY29kZSBmb3IgZXJyb3IgbGV2ZWwgbG9ncyAoNikuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbG9nTGV2ZWwuaW5mbyAtIFN0eWxpbmcgZm9yIGluZm8gbGV2ZWwgbG9ncyAoZW1wdHkgb2JqZWN0KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsb2dMZXZlbC52ZXJib3NlIC0gU3R5bGluZyBmb3IgdmVyYm9zZSBsZXZlbCBsb2dzIChlbXB0eSBvYmplY3QpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGxvZ0xldmVsLmRlYnVnIC0gU3R5bGluZyBmb3IgZGVidWcgbGV2ZWwgbG9ncy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsb2dMZXZlbC5kZWJ1Zy5mZyAtIEZvcmVncm91bmQgY29sb3IgY29kZSBmb3IgZGVidWcgbGV2ZWwgbG9ncyAoNykuXG4gKiBAbWVtYmVyT2YgQGRlY2FmLXRzL3V0aWxzXG4gKi9cbmV4cG9ydCBjb25zdCBEZWZhdWx0VGhlbWUgPSB7XG4gICAgY2xhc3M6IHtcbiAgICAgICAgZmc6IDM0LFxuICAgIH0sXG4gICAgaWQ6IHtcbiAgICAgICAgZmc6IDM2LFxuICAgIH0sXG4gICAgc3RhY2s6IHt9LFxuICAgIHRpbWVzdGFtcDoge30sXG4gICAgbWVzc2FnZToge1xuICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgZmc6IDMxLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgbWV0aG9kOiB7fSxcbiAgICBsb2dMZXZlbDoge1xuICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgZmc6IDMxLFxuICAgICAgICAgICAgc3R5bGU6IFtcImJvbGRcIl0sXG4gICAgICAgIH0sXG4gICAgICAgIGluZm86IHt9LFxuICAgICAgICB2ZXJib3NlOiB7fSxcbiAgICAgICAgZGVidWc6IHtcbiAgICAgICAgICAgIGZnOiAzMyxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbi8qKlxuICogQGRlc2NyaXB0aW9uIERlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgbG9nZ2luZy5cbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHRoZSBsb2dnaW5nIHN5c3RlbSwgaW5jbHVkaW5nIHZlcmJvc2l0eSwgbG9nIGxldmVsLCBzdHlsaW5nLCBhbmQgdGltZXN0YW1wIGZvcm1hdC5cbiAqIEBjb25zdCBEZWZhdWx0TG9nZ2luZ0NvbmZpZ1xuICogQHR5cGVkZWYge0xvZ2dpbmdDb25maWd9IERlZmF1bHRMb2dnaW5nQ29uZmlnXG4gKiBAcHJvcGVydHkge251bWJlcn0gdmVyYm9zZSAtIFZlcmJvc2l0eSBsZXZlbCAoMCkuXG4gKiBAcHJvcGVydHkge0xvZ0xldmVsfSBsZXZlbCAtIERlZmF1bHQgbG9nIGxldmVsIChMb2dMZXZlbC5pbmZvKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc3R5bGUgLSBXaGV0aGVyIHRvIGFwcGx5IHN0eWxpbmcgdG8gbG9nIG91dHB1dCAoZmFsc2UpLlxuICogQHByb3BlcnR5IHtib29sZWFufSB0aW1lc3RhbXAgLSBXaGV0aGVyIHRvIGluY2x1ZGUgdGltZXN0YW1wcyBpbiBsb2cgbWVzc2FnZXMgKHRydWUpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRpbWVzdGFtcEZvcm1hdCAtIEZvcm1hdCBmb3IgdGltZXN0YW1wcyAoXCJISDptbTpzcy5TU1NcIikuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGNvbnRleHQgLSBXaGV0aGVyIHRvIGluY2x1ZGUgY29udGV4dCBpbmZvcm1hdGlvbiBpbiBsb2cgbWVzc2FnZXMgKHRydWUpLlxuICogQHByb3BlcnR5IHtUaGVtZX0gdGhlbWUgLSBUaGUgdGhlbWUgdG8gdXNlIGZvciBzdHlsaW5nIGxvZyBtZXNzYWdlcyAoRGVmYXVsdFRoZW1lKS5cbiAqIEBtZW1iZXJPZiBAZGVjYWYtdHMvdXRpbHNcbiAqL1xuZXhwb3J0IGNvbnN0IERlZmF1bHRMb2dnaW5nQ29uZmlnID0ge1xuICAgIHZlcmJvc2U6IDAsXG4gICAgbGV2ZWw6IExvZ0xldmVsLmluZm8sXG4gICAgbG9nTGV2ZWw6IHRydWUsXG4gICAgbW9kZTogTG9nZ2luZ01vZGUuUkFXLFxuICAgIHN0eWxlOiBmYWxzZSxcbiAgICBzZXBhcmF0b3I6IFwiIC0gXCIsXG4gICAgdGltZXN0YW1wOiB0cnVlLFxuICAgIHRpbWVzdGFtcEZvcm1hdDogXCJISDptbTpzcy5TU1NcIixcbiAgICBjb250ZXh0OiB0cnVlLFxuICAgIHRoZW1lOiBEZWZhdWx0VGhlbWUsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTI5dWMzUmhiblJ6TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMMk52Ym5OMFlXNTBjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGRlFUczdPenM3UjBGTFJ6dEJRVU5JTEUxQlFVMHNRMEZCVGl4SlFVRlpMRkZCVjFnN1FVRllSQ3hYUVVGWkxGRkJRVkU3U1VGRGJFSXNjMFJCUVhORU8wbEJRM1JFTERKQ1FVRmxMRU5CUVVFN1NVRkRaaXhyUlVGQmEwVTdTVUZEYkVVc2VVSkJRV0VzUTBGQlFUdEpRVU5pTEhWRFFVRjFRenRKUVVOMlF5d3JRa0ZCYlVJc1EwRkJRVHRKUVVOdVFpeHJRMEZCYTBNN1NVRkRiRU1zTWtKQlFXVXNRMEZCUVR0SlFVTm1MRFJEUVVFMFF6dEpRVU0xUXl3eVFrRkJaU3hEUVVGQk8wRkJRMnBDTEVOQlFVTXNSVUZZVnl4UlFVRlJMRXRCUVZJc1VVRkJVU3hSUVZkdVFqdEJRVVZFT3pzN096czdPenM3TzBkQlZVYzdRVUZEU0N4TlFVRk5MRU5CUVVNc1RVRkJUU3huUWtGQlowSXNSMEZCUnp0SlFVTTVRaXhMUVVGTExFVkJRVVVzUTBGQlF6dEpRVU5TTEVsQlFVa3NSVUZCUlN4RFFVRkRPMGxCUTFBc1QwRkJUeXhGUVVGRkxFTkJRVU03U1VGRFZpeExRVUZMTEVWQlFVVXNRMEZCUXp0SlFVTlNMRXRCUVVzc1JVRkJSU3hEUVVGRE8wTkJRMVFzUTBGQlF6dEJRVVZHTEUxQlFVMHNRMEZCVGl4SlFVRlpMRmRCUjFnN1FVRklSQ3hYUVVGWkxGZEJRVmM3U1VGRGNrSXNNRUpCUVZjc1EwRkJRVHRKUVVOWUxEUkNRVUZoTEVOQlFVRTdRVUZEWml4RFFVRkRMRVZCU0Zjc1YwRkJWeXhMUVVGWUxGZEJRVmNzVVVGSGRFSTdRVUZGUkRzN096czdPenM3T3pzN096czdPenM3T3pzN096czdSMEYxUWtjN1FVRkRTQ3hOUVVGTkxFTkJRVU1zVFVGQlRTeFpRVUZaTEVkQlFWVTdTVUZEYWtNc1MwRkJTeXhGUVVGRk8xRkJRMHdzUlVGQlJTeEZRVUZGTEVWQlFVVTdTMEZEVUR0SlFVTkVMRVZCUVVVc1JVRkJSVHRSUVVOR0xFVkJRVVVzUlVGQlJTeEZRVUZGTzB0QlExQTdTVUZEUkN4TFFVRkxMRVZCUVVVc1JVRkJSVHRKUVVOVUxGTkJRVk1zUlVGQlJTeEZRVUZGTzBsQlEySXNUMEZCVHl4RlFVRkZPMUZCUTFBc1MwRkJTeXhGUVVGRk8xbEJRMHdzUlVGQlJTeEZRVUZGTEVWQlFVVTdVMEZEVUR0TFFVTkdPMGxCUTBRc1RVRkJUU3hGUVVGRkxFVkJRVVU3U1VGRFZpeFJRVUZSTEVWQlFVVTdVVUZEVWl4TFFVRkxMRVZCUVVVN1dVRkRUQ3hGUVVGRkxFVkJRVVVzUlVGQlJUdFpRVU5PTEV0QlFVc3NSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJRenRUUVVOb1FqdFJRVU5FTEVsQlFVa3NSVUZCUlN4RlFVRkZPMUZCUTFJc1QwRkJUeXhGUVVGRkxFVkJRVVU3VVVGRFdDeExRVUZMTEVWQlFVVTdXVUZEVEN4RlFVRkZMRVZCUVVVc1JVRkJSVHRUUVVOUU8wdEJRMFk3UTBGRFJpeERRVUZETzBGQlJVWTdPenM3T3pzN096czdPenM3UjBGaFJ6dEJRVU5JTEUxQlFVMHNRMEZCUXl4TlFVRk5MRzlDUVVGdlFpeEhRVUZyUWp0SlFVTnFSQ3hQUVVGUExFVkJRVVVzUTBGQlF6dEpRVU5XTEV0QlFVc3NSVUZCUlN4UlFVRlJMRU5CUVVNc1NVRkJTVHRKUVVOd1FpeFJRVUZSTEVWQlFVVXNTVUZCU1R0SlFVTmtMRWxCUVVrc1JVRkJSU3hYUVVGWExFTkJRVU1zUjBGQlJ6dEpRVU55UWl4TFFVRkxMRVZCUVVVc1MwRkJTenRKUVVOYUxGTkJRVk1zUlVGQlJTeExRVUZMTzBsQlEyaENMRk5CUVZNc1JVRkJSU3hKUVVGSk8wbEJRMllzWlVGQlpTeEZRVUZGTEdOQlFXTTdTVUZETDBJc1QwRkJUeXhGUVVGRkxFbEJRVWs3U1VGRFlpeExRVUZMTEVWQlFVVXNXVUZCV1R0RFFVTndRaXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIc2dURzluWjJsdVowTnZibVpwWnl3Z1ZHaGxiV1VnZlNCbWNtOXRJRndpTGk5MGVYQmxjMXdpTzF4dVhHNHZLaXBjYmlBcUlFQmtaWE5qY21sd2RHbHZiaUJGYm5WdElHWnZjaUJzYjJjZ2JHVjJaV3h6TGx4dUlDb2dRSE4xYlcxaGNua2dSR1ZtYVc1bGN5QmthV1ptWlhKbGJuUWdiR1YyWld4eklHOW1JR3h2WjJkcGJtY2dabTl5SUhSb1pTQmhjSEJzYVdOaGRHbHZiaTVjYmlBcUlFQmxiblZ0SUh0emRISnBibWQ5WEc0Z0tpQkFiV1Z0WW1WeVQyWWdRR1JsWTJGbUxYUnpMM1YwYVd4elhHNGdLaTljYm1WNGNHOXlkQ0JsYm5WdElFeHZaMHhsZG1Wc0lIdGNiaUFnTHlvcUlFVnljbTl5SUdWMlpXNTBjeUIwYUdGMElHRnlaU0JzYVd0bGJIa2dkRzhnWTJGMWMyVWdjSEp2WW14bGJYTXVJQ292WEc0Z0lHVnljbTl5SUQwZ1hDSmxjbkp2Y2x3aUxGeHVJQ0F2S2lvZ1VtOTFkR2x1WlNCcGJtWnZjbTFoZEdsdmJpd2djM1ZqYUNCaGN5QnZibWR2YVc1bklITjBZWFIxY3lCdmNpQndaWEptYjNKdFlXNWpaUzRnS2k5Y2JpQWdhVzVtYnlBOUlGd2lhVzVtYjF3aUxGeHVJQ0F2S2lvZ1FXUmthWFJwYjI1aGJDQnlaV3hsZG1GdWRDQnBibVp2Y20xaGRHbHZiaTRnS2k5Y2JpQWdkbVZ5WW05elpTQTlJRndpZG1WeVltOXpaVndpTEZ4dUlDQXZLaW9nUkdWaWRXY2diM0lnZEhKaFkyVWdhVzVtYjNKdFlYUnBiMjR1SUNvdlhHNGdJR1JsWW5WbklEMGdYQ0prWldKMVoxd2lMRnh1SUNBdktpb2dkMkY1SUhSdmJ5QjJaWEppYjNObElHOXlJSE5wYkd4NUlHbHVabTl5YldGMGFXOXVMaUFxTDF4dUlDQnphV3hzZVNBOUlGd2ljMmxzYkhsY0lpeGNibjFjYmx4dUx5b3FYRzRnS2lCQVpHVnpZM0pwY0hScGIyNGdUblZ0WlhKcFl5QjJZV3gxWlhNZ1lYTnpiMk5wWVhSbFpDQjNhWFJvSUd4dlp5QnNaWFpsYkhNdVhHNGdLaUJBYzNWdGJXRnllU0JRY205MmFXUmxjeUJoSUc1MWJXVnlhV01nY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnYkc5bklHeGxkbVZzY3lCbWIzSWdZMjl0Y0dGeWFYTnZiaUJoYm1RZ1ptbHNkR1Z5YVc1bkxseHVJQ29nUUdOdmJuTjBJSHRQWW1wbFkzUjlJRTUxYldWeWFXTk1iMmRNWlhabGJITmNiaUFxSUVCd2NtOXdaWEowZVNCN2JuVnRZbVZ5ZlNCbGNuSnZjaUF0SUU1MWJXVnlhV01nZG1Gc2RXVWdabTl5SUdWeWNtOXlJR3hsZG1Wc0lDZ3dLUzVjYmlBcUlFQndjbTl3WlhKMGVTQjdiblZ0WW1WeWZTQnBibVp2SUMwZ1RuVnRaWEpwWXlCMllXeDFaU0JtYjNJZ2FXNW1ieUJzWlhabGJDQW9NaWt1WEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMjUxYldKbGNuMGdkbVZ5WW05elpTQXRJRTUxYldWeWFXTWdkbUZzZFdVZ1ptOXlJSFpsY21KdmMyVWdiR1YyWld3Z0tEUXBMbHh1SUNvZ1FIQnliM0JsY25SNUlIdHVkVzFpWlhKOUlHUmxZblZuSUMwZ1RuVnRaWEpwWXlCMllXeDFaU0JtYjNJZ1pHVmlkV2NnYkdWMlpXd2dLRFVwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHR1ZFcxaVpYSjlJSE5wYkd4NUlDMGdUblZ0WlhKcFl5QjJZV3gxWlNCbWIzSWdjMmxzYkhrZ2JHVjJaV3dnS0RncExseHVJQ29nUUcxbGJXSmxjazltSUVCa1pXTmhaaTEwY3k5MWRHbHNjMXh1SUNvdlhHNWxlSEJ2Y25RZ1kyOXVjM1FnVG5WdFpYSnBZMHh2WjB4bGRtVnNjeUE5SUh0Y2JpQWdaWEp5YjNJNklESXNYRzRnSUdsdVptODZJRFFzWEc0Z0lIWmxjbUp2YzJVNklEWXNYRzRnSUdSbFluVm5PaUEzTEZ4dUlDQnphV3hzZVRvZ09TeGNibjA3WEc1Y2JtVjRjRzl5ZENCbGJuVnRJRXh2WjJkcGJtZE5iMlJsSUh0Y2JpQWdVa0ZYSUQwZ1hDSnlZWGRjSWl4Y2JpQWdTbE5QVGlBOUlGd2lhbk52Ymx3aUxGeHVmVnh1WEc0dktpcGNiaUFxSUVCa1pYTmpjbWx3ZEdsdmJpQkVaV1poZFd4MElIUm9aVzFsSUdadmNpQnpkSGxzYVc1bklHeHZaeUJ2ZFhSd2RYUXVYRzRnS2lCQWMzVnRiV0Z5ZVNCRVpXWnBibVZ6SUhSb1pTQmtaV1poZFd4MElHTnZiRzl5SUdGdVpDQnpkSGxzWlNCelpYUjBhVzVuY3lCbWIzSWdkbUZ5YVc5MWN5QmpiMjF3YjI1bGJuUnpJRzltSUd4dlp5QnRaWE56WVdkbGN5NWNiaUFxSUVCamIyNXpkQ0JFWldaaGRXeDBWR2hsYldWY2JpQXFJRUIwZVhCbFpHVm1JSHRVYUdWdFpYMGdSR1ZtWVhWc2RGUm9aVzFsWEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMDlpYW1WamRIMGdZMnhoYzNNZ0xTQlRkSGxzYVc1bklHWnZjaUJqYkdGemN5QnVZVzFsY3k1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3Ym5WdFltVnlmU0JqYkdGemN5NW1aeUF0SUVadmNtVm5jbTkxYm1RZ1kyOXNiM0lnWTI5a1pTQm1iM0lnWTJ4aGMzTWdibUZ0WlhNZ0tEUXBMbHh1SUNvZ1FIQnliM0JsY25SNUlIdFBZbXBsWTNSOUlHbGtJQzBnVTNSNWJHbHVaeUJtYjNJZ2FXUmxiblJwWm1sbGNuTXVYRzRnS2lCQWNISnZjR1Z5ZEhrZ2UyNTFiV0psY24wZ2FXUXVabWNnTFNCR2IzSmxaM0p2ZFc1a0lHTnZiRzl5SUdOdlpHVWdabTl5SUdsa1pXNTBhV1pwWlhKeklDZ3pOaWt1WEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMDlpYW1WamRIMGdjM1JoWTJzZ0xTQlRkSGxzYVc1bklHWnZjaUJ6ZEdGamF5QjBjbUZqWlhNZ0tHVnRjSFI1SUc5aWFtVmpkQ2t1WEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMDlpYW1WamRIMGdkR2x0WlhOMFlXMXdJQzBnVTNSNWJHbHVaeUJtYjNJZ2RHbHRaWE4wWVcxd2N5QW9aVzF3ZEhrZ2IySnFaV04wS1M1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3VDJKcVpXTjBmU0J0WlhOellXZGxJQzBnVTNSNWJHbHVaeUJtYjNJZ1pHbG1abVZ5Wlc1MElIUjVjR1Z6SUc5bUlHMWxjM05oWjJWekxseHVJQ29nUUhCeWIzQmxjblI1SUh0UFltcGxZM1I5SUcxbGMzTmhaMlV1WlhKeWIzSWdMU0JUZEhsc2FXNW5JR1p2Y2lCbGNuSnZjaUJ0WlhOellXZGxjeTVjYmlBcUlFQndjbTl3WlhKMGVTQjdiblZ0WW1WeWZTQnRaWE56WVdkbExtVnljbTl5TG1abklDMGdSbTl5WldkeWIzVnVaQ0JqYjJ4dmNpQmpiMlJsSUdadmNpQmxjbkp2Y2lCdFpYTnpZV2RsY3lBb016UXBMbHh1SUNvZ1FIQnliM0JsY25SNUlIdFBZbXBsWTNSOUlHMWxkR2h2WkNBdElGTjBlV3hwYm1jZ1ptOXlJRzFsZEdodlpDQnVZVzFsY3lBb1pXMXdkSGtnYjJKcVpXTjBLUzVjYmlBcUlFQndjbTl3WlhKMGVTQjdUMkpxWldOMGZTQnNiMmRNWlhabGJDQXRJRk4wZVd4cGJtY2dabTl5SUdScFptWmxjbVZ1ZENCc2IyY2diR1YyWld4ekxseHVJQ29nUUhCeWIzQmxjblI1SUh0UFltcGxZM1I5SUd4dloweGxkbVZzTG1WeWNtOXlJQzBnVTNSNWJHbHVaeUJtYjNJZ1pYSnliM0lnYkdWMlpXd2diRzluY3k1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3Ym5WdFltVnlmU0JzYjJkTVpYWmxiQzVsY25KdmNpNW1aeUF0SUVadmNtVm5jbTkxYm1RZ1kyOXNiM0lnWTI5a1pTQm1iM0lnWlhKeWIzSWdiR1YyWld3Z2JHOW5jeUFvTmlrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTA5aWFtVmpkSDBnYkc5blRHVjJaV3d1YVc1bWJ5QXRJRk4wZVd4cGJtY2dabTl5SUdsdVptOGdiR1YyWld3Z2JHOW5jeUFvWlcxd2RIa2diMkpxWldOMEtTNWNiaUFxSUVCd2NtOXdaWEowZVNCN1QySnFaV04wZlNCc2IyZE1aWFpsYkM1MlpYSmliM05sSUMwZ1UzUjViR2x1WnlCbWIzSWdkbVZ5WW05elpTQnNaWFpsYkNCc2IyZHpJQ2hsYlhCMGVTQnZZbXBsWTNRcExseHVJQ29nUUhCeWIzQmxjblI1SUh0UFltcGxZM1I5SUd4dloweGxkbVZzTG1SbFluVm5JQzBnVTNSNWJHbHVaeUJtYjNJZ1pHVmlkV2NnYkdWMlpXd2diRzluY3k1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3Ym5WdFltVnlmU0JzYjJkTVpYWmxiQzVrWldKMVp5NW1aeUF0SUVadmNtVm5jbTkxYm1RZ1kyOXNiM0lnWTI5a1pTQm1iM0lnWkdWaWRXY2diR1YyWld3Z2JHOW5jeUFvTnlrdVhHNGdLaUJBYldWdFltVnlUMllnUUdSbFkyRm1MWFJ6TDNWMGFXeHpYRzRnS2k5Y2JtVjRjRzl5ZENCamIyNXpkQ0JFWldaaGRXeDBWR2hsYldVNklGUm9aVzFsSUQwZ2UxeHVJQ0JqYkdGemN6b2dlMXh1SUNBZ0lHWm5PaUF6TkN4Y2JpQWdmU3hjYmlBZ2FXUTZJSHRjYmlBZ0lDQm1aem9nTXpZc1hHNGdJSDBzWEc0Z0lITjBZV05yT2lCN2ZTeGNiaUFnZEdsdFpYTjBZVzF3T2lCN2ZTeGNiaUFnYldWemMyRm5aVG9nZTF4dUlDQWdJR1Z5Y205eU9pQjdYRzRnSUNBZ0lDQm1aem9nTXpFc1hHNGdJQ0FnZlN4Y2JpQWdmU3hjYmlBZ2JXVjBhRzlrT2lCN2ZTeGNiaUFnYkc5blRHVjJaV3c2SUh0Y2JpQWdJQ0JsY25KdmNqb2dlMXh1SUNBZ0lDQWdabWM2SURNeExGeHVJQ0FnSUNBZ2MzUjViR1U2SUZ0Y0ltSnZiR1JjSWwwc1hHNGdJQ0FnZlN4Y2JpQWdJQ0JwYm1adk9pQjdmU3hjYmlBZ0lDQjJaWEppYjNObE9pQjdmU3hjYmlBZ0lDQmtaV0oxWnpvZ2UxeHVJQ0FnSUNBZ1ptYzZJRE16TEZ4dUlDQWdJSDBzWEc0Z0lIMHNYRzU5TzF4dVhHNHZLaXBjYmlBcUlFQmtaWE5qY21sd2RHbHZiaUJFWldaaGRXeDBJR052Ym1acFozVnlZWFJwYjI0Z1ptOXlJR3h2WjJkcGJtY3VYRzRnS2lCQWMzVnRiV0Z5ZVNCRVpXWnBibVZ6SUhSb1pTQmtaV1poZFd4MElITmxkSFJwYm1keklHWnZjaUIwYUdVZ2JHOW5aMmx1WnlCemVYTjBaVzBzSUdsdVkyeDFaR2x1WnlCMlpYSmliM05wZEhrc0lHeHZaeUJzWlhabGJDd2djM1I1YkdsdVp5d2dZVzVrSUhScGJXVnpkR0Z0Y0NCbWIzSnRZWFF1WEc0Z0tpQkFZMjl1YzNRZ1JHVm1ZWFZzZEV4dloyZHBibWREYjI1bWFXZGNiaUFxSUVCMGVYQmxaR1ZtSUh0TWIyZG5hVzVuUTI5dVptbG5mU0JFWldaaGRXeDBURzluWjJsdVowTnZibVpwWjF4dUlDb2dRSEJ5YjNCbGNuUjVJSHR1ZFcxaVpYSjlJSFpsY21KdmMyVWdMU0JXWlhKaWIzTnBkSGtnYkdWMlpXd2dLREFwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHRNYjJkTVpYWmxiSDBnYkdWMlpXd2dMU0JFWldaaGRXeDBJR3h2WnlCc1pYWmxiQ0FvVEc5blRHVjJaV3d1YVc1bWJ5a3VYRzRnS2lCQWNISnZjR1Z5ZEhrZ2UySnZiMnhsWVc1OUlITjBlV3hsSUMwZ1YyaGxkR2hsY2lCMGJ5QmhjSEJzZVNCemRIbHNhVzVuSUhSdklHeHZaeUJ2ZFhSd2RYUWdLR1poYkhObEtTNWNiaUFxSUVCd2NtOXdaWEowZVNCN1ltOXZiR1ZoYm4wZ2RHbHRaWE4wWVcxd0lDMGdWMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxJSFJwYldWemRHRnRjSE1nYVc0Z2JHOW5JRzFsYzNOaFoyVnpJQ2gwY25WbEtTNWNiaUFxSUVCd2NtOXdaWEowZVNCN2MzUnlhVzVuZlNCMGFXMWxjM1JoYlhCR2IzSnRZWFFnTFNCR2IzSnRZWFFnWm05eUlIUnBiV1Z6ZEdGdGNITWdLRndpU0VnNmJXMDZjM011VTFOVFhDSXBMbHh1SUNvZ1FIQnliM0JsY25SNUlIdGliMjlzWldGdWZTQmpiMjUwWlhoMElDMGdWMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxJR052Ym5SbGVIUWdhVzVtYjNKdFlYUnBiMjRnYVc0Z2JHOW5JRzFsYzNOaFoyVnpJQ2gwY25WbEtTNWNiaUFxSUVCd2NtOXdaWEowZVNCN1ZHaGxiV1Y5SUhSb1pXMWxJQzBnVkdobElIUm9aVzFsSUhSdklIVnpaU0JtYjNJZ2MzUjViR2x1WnlCc2IyY2diV1Z6YzJGblpYTWdLRVJsWm1GMWJIUlVhR1Z0WlNrdVhHNGdLaUJBYldWdFltVnlUMllnUUdSbFkyRm1MWFJ6TDNWMGFXeHpYRzRnS2k5Y2JtVjRjRzl5ZENCamIyNXpkQ0JFWldaaGRXeDBURzluWjJsdVowTnZibVpwWnpvZ1RHOW5aMmx1WjBOdmJtWnBaeUE5SUh0Y2JpQWdkbVZ5WW05elpUb2dNQ3hjYmlBZ2JHVjJaV3c2SUV4dloweGxkbVZzTG1sdVptOHNYRzRnSUd4dloweGxkbVZzT2lCMGNuVmxMRnh1SUNCdGIyUmxPaUJNYjJkbmFXNW5UVzlrWlM1U1FWY3NYRzRnSUhOMGVXeGxPaUJtWVd4elpTeGNiaUFnYzJWd1lYSmhkRzl5T2lCY0lpQXRJRndpTEZ4dUlDQjBhVzFsYzNSaGJYQTZJSFJ5ZFdVc1hHNGdJSFJwYldWemRHRnRjRVp2Y20xaGREb2dYQ0pJU0RwdGJUcHpjeTVUVTFOY0lpeGNiaUFnWTI5dWRHVjRkRG9nZEhKMVpTeGNiaUFnZEdobGJXVTZJRVJsWm1GMWJIUlVhR1Z0WlN4Y2JuMDdYRzRpWFgwPSIsIi8qKlxuICogQGRlc2NyaXB0aW9uIEFOU0kgZXNjYXBlIGNvZGUgZm9yIHJlc2V0dGluZyB0ZXh0IGZvcm1hdHRpbmcuXG4gKiBAc3VtbWFyeSBUaGlzIGNvbnN0YW50IGhvbGRzIHRoZSBBTlNJIGVzY2FwZSBzZXF1ZW5jZSB1c2VkIHRvIHJlc2V0IGFsbCB0ZXh0IGZvcm1hdHRpbmcgdG8gZGVmYXVsdC5cbiAqIEBjb25zdCBBbnNpUmVzZXRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6U3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBBbnNpUmVzZXQgPSBcIlxceDFiWzBtXCI7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBTdGFuZGFyZCBmb3JlZ3JvdW5kIGNvbG9yIGNvZGVzIGZvciBBTlNJIHRleHQgZm9ybWF0dGluZy5cbiAqIEBzdW1tYXJ5IFRoaXMgb2JqZWN0IG1hcHMgY29sb3IgbmFtZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBBTlNJIGNvbG9yIGNvZGVzIGZvciBzdGFuZGFyZCBmb3JlZ3JvdW5kIGNvbG9ycy5cbiAqIEBjb25zdCBTdGFuZGFyZEZvcmVncm91bmRDb2xvcnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBibGFjayAtIEFOU0kgY29kZSBmb3IgYmxhY2sgdGV4dCAoMzApLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHJlZCAtIEFOU0kgY29kZSBmb3IgcmVkIHRleHQgKDMxKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBncmVlbiAtIEFOU0kgY29kZSBmb3IgZ3JlZW4gdGV4dCAoMzIpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHllbGxvdyAtIEFOU0kgY29kZSBmb3IgeWVsbG93IHRleHQgKDMzKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBibHVlIC0gQU5TSSBjb2RlIGZvciBibHVlIHRleHQgKDM0KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYWdlbnRhIC0gQU5TSSBjb2RlIGZvciBtYWdlbnRhIHRleHQgKDM1KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjeWFuIC0gQU5TSSBjb2RlIGZvciBjeWFuIHRleHQgKDM2KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB3aGl0ZSAtIEFOU0kgY29kZSBmb3Igd2hpdGUgdGV4dCAoMzcpLlxuICogQG1lbWJlck9mIG1vZHVsZTpTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IFN0YW5kYXJkRm9yZWdyb3VuZENvbG9ycyA9IHtcbiAgICBibGFjazogMzAsXG4gICAgcmVkOiAzMSxcbiAgICBncmVlbjogMzIsXG4gICAgeWVsbG93OiAzMyxcbiAgICBibHVlOiAzNCxcbiAgICBtYWdlbnRhOiAzNSxcbiAgICBjeWFuOiAzNixcbiAgICB3aGl0ZTogMzcsXG59O1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gQnJpZ2h0IGZvcmVncm91bmQgY29sb3IgY29kZXMgZm9yIEFOU0kgdGV4dCBmb3JtYXR0aW5nLlxuICogQHN1bW1hcnkgVGhpcyBvYmplY3QgbWFwcyBjb2xvciBuYW1lcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIEFOU0kgY29sb3IgY29kZXMgZm9yIGJyaWdodCBmb3JlZ3JvdW5kIGNvbG9ycy5cbiAqIEBjb25zdCBCcmlnaHRGb3JlZ3JvdW5kQ29sb3JzXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmxhY2sgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCBibGFjayB0ZXh0ICg5MCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gcmVkIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgcmVkIHRleHQgKDkxKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBncmVlbiAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IGdyZWVuIHRleHQgKDkyKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB5ZWxsb3cgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCB5ZWxsb3cgdGV4dCAoOTMpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJsdWUgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCBibHVlIHRleHQgKDk0KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYWdlbnRhIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgbWFnZW50YSB0ZXh0ICg5NSkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gY3lhbiAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IGN5YW4gdGV4dCAoOTYpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdoaXRlIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgd2hpdGUgdGV4dCAoOTcpLlxuICogQG1lbWJlck9mIG1vZHVsZTpAU3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBCcmlnaHRGb3JlZ3JvdW5kQ29sb3JzID0ge1xuICAgIGJyaWdodEJsYWNrOiA5MCxcbiAgICBicmlnaHRSZWQ6IDkxLFxuICAgIGJyaWdodEdyZWVuOiA5MixcbiAgICBicmlnaHRZZWxsb3c6IDkzLFxuICAgIGJyaWdodEJsdWU6IDk0LFxuICAgIGJyaWdodE1hZ2VudGE6IDk1LFxuICAgIGJyaWdodEN5YW46IDk2LFxuICAgIGJyaWdodFdoaXRlOiA5Nyxcbn07XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBTdGFuZGFyZCBiYWNrZ3JvdW5kIGNvbG9yIGNvZGVzIGZvciBBTlNJIHRleHQgZm9ybWF0dGluZy5cbiAqIEBzdW1tYXJ5IFRoaXMgb2JqZWN0IG1hcHMgY29sb3IgbmFtZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBBTlNJIGNvbG9yIGNvZGVzIGZvciBzdGFuZGFyZCBiYWNrZ3JvdW5kIGNvbG9ycy5cbiAqIEBjb25zdCBTdGFuZGFyZEJhY2tncm91bmRDb2xvcnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0JsYWNrIC0gQU5TSSBjb2RlIGZvciBibGFjayBiYWNrZ3JvdW5kICg0MCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdSZWQgLSBBTlNJIGNvZGUgZm9yIHJlZCBiYWNrZ3JvdW5kICg0MSkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdHcmVlbiAtIEFOU0kgY29kZSBmb3IgZ3JlZW4gYmFja2dyb3VuZCAoNDIpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnWWVsbG93IC0gQU5TSSBjb2RlIGZvciB5ZWxsb3cgYmFja2dyb3VuZCAoNDMpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnQmx1ZSAtIEFOU0kgY29kZSBmb3IgYmx1ZSBiYWNrZ3JvdW5kICg0NCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdNYWdlbnRhIC0gQU5TSSBjb2RlIGZvciBtYWdlbnRhIGJhY2tncm91bmQgKDQ1KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0N5YW4gLSBBTlNJIGNvZGUgZm9yIGN5YW4gYmFja2dyb3VuZCAoNDYpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnV2hpdGUgLSBBTlNJIGNvZGUgZm9yIHdoaXRlIGJhY2tncm91bmQgKDQ3KS5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6QFN0eWxlZFN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgU3RhbmRhcmRCYWNrZ3JvdW5kQ29sb3JzID0ge1xuICAgIGJnQmxhY2s6IDQwLFxuICAgIGJnUmVkOiA0MSxcbiAgICBiZ0dyZWVuOiA0MixcbiAgICBiZ1llbGxvdzogNDMsXG4gICAgYmdCbHVlOiA0NCxcbiAgICBiZ01hZ2VudGE6IDQ1LFxuICAgIGJnQ3lhbjogNDYsXG4gICAgYmdXaGl0ZTogNDcsXG59O1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gQnJpZ2h0IGJhY2tncm91bmQgY29sb3IgY29kZXMgZm9yIEFOU0kgdGV4dCBmb3JtYXR0aW5nLlxuICogQHN1bW1hcnkgVGhpcyBvYmplY3QgbWFwcyBjb2xvciBuYW1lcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIEFOU0kgY29sb3IgY29kZXMgZm9yIGJyaWdodCBiYWNrZ3JvdW5kIGNvbG9ycy5cbiAqIEBjb25zdCBCcmlnaHRCYWNrZ3JvdW5kQ29sb3JzXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdCcmlnaHRCbGFjayAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IGJsYWNrIGJhY2tncm91bmQgKDEwMCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdCcmlnaHRSZWQgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCByZWQgYmFja2dyb3VuZCAoMTAxKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0JyaWdodEdyZWVuIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgZ3JlZW4gYmFja2dyb3VuZCAoMTAyKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0JyaWdodFllbGxvdyAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IHllbGxvdyBiYWNrZ3JvdW5kICgxMDMpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnQnJpZ2h0Qmx1ZSAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IGJsdWUgYmFja2dyb3VuZCAoMTA0KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0JyaWdodE1hZ2VudGEgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCBtYWdlbnRhIGJhY2tncm91bmQgKDEwNSkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdCcmlnaHRDeWFuIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgY3lhbiBiYWNrZ3JvdW5kICgxMDYpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnQnJpZ2h0V2hpdGUgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCB3aGl0ZSBiYWNrZ3JvdW5kICgxMDcpLlxuICogQG1lbWJlck9mIG1vZHVsZTpAU3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBCcmlnaHRCYWNrZ3JvdW5kQ29sb3JzID0ge1xuICAgIGJnQnJpZ2h0QmxhY2s6IDEwMCxcbiAgICBiZ0JyaWdodFJlZDogMTAxLFxuICAgIGJnQnJpZ2h0R3JlZW46IDEwMixcbiAgICBiZ0JyaWdodFllbGxvdzogMTAzLFxuICAgIGJnQnJpZ2h0Qmx1ZTogMTA0LFxuICAgIGJnQnJpZ2h0TWFnZW50YTogMTA1LFxuICAgIGJnQnJpZ2h0Q3lhbjogMTA2LFxuICAgIGJnQnJpZ2h0V2hpdGU6IDEwNyxcbn07XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUZXh0IHN0eWxlIGNvZGVzIGZvciBBTlNJIHRleHQgZm9ybWF0dGluZy5cbiAqIEBzdW1tYXJ5IFRoaXMgb2JqZWN0IG1hcHMgc3R5bGUgbmFtZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBBTlNJIGNvZGVzIGZvciB2YXJpb3VzIHRleHQgc3R5bGVzLlxuICogQGNvbnN0IHN0eWxlc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHJlc2V0IC0gQU5TSSBjb2RlIHRvIHJlc2V0IGFsbCBzdHlsZXMgKDApLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJvbGQgLSBBTlNJIGNvZGUgZm9yIGJvbGQgdGV4dCAoMSkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gZGltIC0gQU5TSSBjb2RlIGZvciBkaW0gdGV4dCAoMikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gaXRhbGljIC0gQU5TSSBjb2RlIGZvciBpdGFsaWMgdGV4dCAoMykuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdW5kZXJsaW5lIC0gQU5TSSBjb2RlIGZvciB1bmRlcmxpbmVkIHRleHQgKDQpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJsaW5rIC0gQU5TSSBjb2RlIGZvciBibGlua2luZyB0ZXh0ICg1KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpbnZlcnNlIC0gQU5TSSBjb2RlIGZvciBpbnZlcnNlIGNvbG9ycyAoNykuXG4gKiBAcHJvcGVydHkge251bWJlcn0gaGlkZGVuIC0gQU5TSSBjb2RlIGZvciBoaWRkZW4gdGV4dCAoOCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gc3RyaWtldGhyb3VnaCAtIEFOU0kgY29kZSBmb3Igc3RyaWtldGhyb3VnaCB0ZXh0ICg5KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkb3VibGVVbmRlcmxpbmUgLSBBTlNJIGNvZGUgZm9yIGRvdWJsZSB1bmRlcmxpbmVkIHRleHQgKDIxKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBub3JtYWxDb2xvciAtIEFOU0kgY29kZSB0byByZXNldCBjb2xvciB0byBub3JtYWwgKDIyKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBub0l0YWxpY09yRnJha3R1ciAtIEFOU0kgY29kZSB0byB0dXJuIG9mZiBpdGFsaWMgKDIzKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBub1VuZGVybGluZSAtIEFOU0kgY29kZSB0byB0dXJuIG9mZiB1bmRlcmxpbmUgKDI0KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBub0JsaW5rIC0gQU5TSSBjb2RlIHRvIHR1cm4gb2ZmIGJsaW5rICgyNSkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gbm9JbnZlcnNlIC0gQU5TSSBjb2RlIHRvIHR1cm4gb2ZmIGludmVyc2UgKDI3KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBub0hpZGRlbiAtIEFOU0kgY29kZSB0byB0dXJuIG9mZiBoaWRkZW4gKDI4KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBub1N0cmlrZXRocm91Z2ggLSBBTlNJIGNvZGUgdG8gdHVybiBvZmYgc3RyaWtldGhyb3VnaCAoMjkpLlxuICogQG1lbWJlck9mIG1vZHVsZTpAU3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBzdHlsZXMgPSB7XG4gICAgcmVzZXQ6IDAsXG4gICAgYm9sZDogMSxcbiAgICBkaW06IDIsXG4gICAgaXRhbGljOiAzLFxuICAgIHVuZGVybGluZTogNCxcbiAgICBibGluazogNSxcbiAgICBpbnZlcnNlOiA3LFxuICAgIGhpZGRlbjogOCxcbiAgICBzdHJpa2V0aHJvdWdoOiA5LFxuICAgIGRvdWJsZVVuZGVybGluZTogMjEsXG4gICAgbm9ybWFsQ29sb3I6IDIyLFxuICAgIG5vSXRhbGljT3JGcmFrdHVyOiAyMyxcbiAgICBub1VuZGVybGluZTogMjQsXG4gICAgbm9CbGluazogMjUsXG4gICAgbm9JbnZlcnNlOiAyNyxcbiAgICBub0hpZGRlbjogMjgsXG4gICAgbm9TdHJpa2V0aHJvdWdoOiAyOSxcbn07XG4iLCJpbXBvcnQgeyBBbnNpUmVzZXQsIHN0eWxlcyB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gQXBwbGllcyBhIGJhc2ljIEFOU0kgY29sb3IgY29kZSB0byB0ZXh0LlxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHN0cmluZywgYW4gQU5TSSBjb2xvciBjb2RlIG51bWJlciwgYW5kIGFuIG9wdGlvbmFsIGJhY2tncm91bmQgZmxhZy5cbiAqIEl0IHJldHVybnMgdGhlIHRleHQgd3JhcHBlZCBpbiB0aGUgYXBwcm9wcmlhdGUgQU5TSSBlc2NhcGUgY29kZXMgZm9yIGVpdGhlciBmb3JlZ3JvdW5kIG9yIGJhY2tncm91bmQgY29sb3JpbmcuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIGJhc2ljIDE2LWNvbG9yIEFOU0kgZm9ybWF0dGluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IHRvIGJlIGNvbG9yZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gbiAtIFRoZSBBTlNJIGNvbG9yIGNvZGUgbnVtYmVyLlxuICogQHBhcmFtIHtib29sZWFufSBbYmc9ZmFsc2VdIC0gSWYgdHJ1ZSwgYXBwbGllcyB0aGUgY29sb3IgdG8gdGhlIGJhY2tncm91bmQgaW5zdGVhZCBvZiB0aGUgZm9yZWdyb3VuZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHRleHQgd3JhcHBlZCBpbiBBTlNJIGNvbG9yIGNvZGVzLlxuICpcbiAqIEBmdW5jdGlvbiBjb2xvcml6ZUFOU0lcbiAqIEBtZW1iZXJPZiBtb2R1bGU6QFN0eWxlZFN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29sb3JpemVBTlNJKHRleHQsIG4sIGJnID0gZmFsc2UpIHtcbiAgICBpZiAoaXNOYU4obikpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIGNvbG9yIG51bWJlciBvbiB0aGUgQU5TSSBzY2FsZTogJHtufS4gaWdub3JpbmcuLi5gKTtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICAgIGlmIChiZyAmJiAoKG4gPiAzMCAmJiBuIDw9IDQwKVxuICAgICAgICB8fCAobiA+IDkwICYmIG4gPD0gMTAwKSkpIHtcbiAgICAgICAgbiA9IG4gKyAxMDtcbiAgICB9XG4gICAgcmV0dXJuIGBcXHgxYlske259bSR7dGV4dH0ke0Fuc2lSZXNldH1gO1xufVxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQXBwbGllcyBhIDI1Ni1jb2xvciBBTlNJIGNvZGUgdG8gdGV4dC5cbiAqIEBzdW1tYXJ5IFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBzdHJpbmcgYW5kIGEgY29sb3IgbnVtYmVyICgwLTI1NSkgYW5kIHJldHVybnMgdGhlIHRleHRcbiAqIHdyYXBwZWQgaW4gQU5TSSBlc2NhcGUgY29kZXMgZm9yIGVpdGhlciBmb3JlZ3JvdW5kIG9yIGJhY2tncm91bmQgY29sb3JpbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCB0byBiZSBjb2xvcmVkLlxuICogQHBhcmFtIHtudW1iZXJ9IG4gLSBUaGUgY29sb3IgbnVtYmVyICgwLTI1NSkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtiZz1mYWxzZV0gLSBJZiB0cnVlLCBhcHBsaWVzIHRoZSBjb2xvciB0byB0aGUgYmFja2dyb3VuZCBpbnN0ZWFkIG9mIHRoZSBmb3JlZ3JvdW5kLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgdGV4dCB3cmFwcGVkIGluIEFOU0kgY29sb3IgY29kZXMuXG4gKlxuICogQGZ1bmN0aW9uIGNvbG9yaXplMjU2XG4gKiBAbWVtYmVyT2YgbW9kdWxlOkBTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yaXplMjU2KHRleHQsIG4sIGJnID0gZmFsc2UpIHtcbiAgICBpZiAoaXNOYU4obikpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIGNvbG9yIG51bWJlciBvbiB0aGUgMjU2IHNjYWxlOiAke259LiBpZ25vcmluZy4uLmApO1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgaWYgKG4gPCAwIHx8IG4gPiAyNTUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIGNvbG9yIG51bWJlciBvbiB0aGUgMjU2IHNjYWxlOiAke259LiBpZ25vcmluZy4uLmApO1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgcmV0dXJuIGBcXHgxYlske2JnID8gNDggOiAzOH07NTske259bSR7dGV4dH0ke0Fuc2lSZXNldH1gO1xufVxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQXBwbGllcyBhbiBSR0IgY29sb3IgQU5TSSBjb2RlIHRvIHRleHQuXG4gKiBAc3VtbWFyeSBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgc3RyaW5nIGFuZCBSR0IgY29sb3IgdmFsdWVzICgwLTI1NSBmb3IgZWFjaCBjb21wb25lbnQpXG4gKiBhbmQgcmV0dXJucyB0aGUgdGV4dCB3cmFwcGVkIGluIEFOU0kgZXNjYXBlIGNvZGVzIGZvciBlaXRoZXIgZm9yZWdyb3VuZCBvciBiYWNrZ3JvdW5kIGNvbG9yaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgdG8gYmUgY29sb3JlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSByIC0gVGhlIHJlZCBjb21wb25lbnQgb2YgdGhlIGNvbG9yICgwLTI1NSkuXG4gKiBAcGFyYW0ge251bWJlcn0gZyAtIFRoZSBncmVlbiBjb21wb25lbnQgb2YgdGhlIGNvbG9yICgwLTI1NSkuXG4gKiBAcGFyYW0ge251bWJlcn0gYiAtIFRoZSBibHVlIGNvbXBvbmVudCBvZiB0aGUgY29sb3IgKDAtMjU1KS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2JnPWZhbHNlXSAtIElmIHRydWUsIGFwcGxpZXMgdGhlIGNvbG9yIHRvIHRoZSBiYWNrZ3JvdW5kIGluc3RlYWQgb2YgdGhlIGZvcmVncm91bmQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSB0ZXh0IHdyYXBwZWQgaW4gQU5TSSBjb2xvciBjb2Rlcy5cbiAqXG4gKiBAZnVuY3Rpb24gY29sb3JpemVSR0JcbiAqIEBtZW1iZXJPZiBtb2R1bGU6U3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xvcml6ZVJHQih0ZXh0LCByLCBnLCBiLCBiZyA9IGZhbHNlKSB7XG4gICAgaWYgKGlzTmFOKHIpIHx8IGlzTmFOKGcpIHx8IGlzTmFOKGIpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgSW52YWxpZCBSR0IgY29sb3IgdmFsdWVzOiByPSR7cn0sIGc9JHtnfSwgYj0ke2J9LiBJZ25vcmluZy4uLmApO1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgaWYgKFtyLCBnLCBiXS5zb21lKHYgPT4gdiA8IDAgfHwgdiA+IDI1NSkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIFJHQiBjb2xvciB2YWx1ZXM6IHI9JHtyfSwgZz0ke2d9LCBiPSR7Yn0uIElnbm9yaW5nLi4uYCk7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICByZXR1cm4gYFxceDFiWyR7YmcgPyA0OCA6IDM4fTsyOyR7cn07JHtnfTske2J9bSR7dGV4dH0ke0Fuc2lSZXNldH1gO1xufVxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQXBwbGllcyBhbiBBTlNJIHN0eWxlIGNvZGUgdG8gdGV4dC5cbiAqIEBzdW1tYXJ5IFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBzdHJpbmcgYW5kIGEgc3R5bGUgY29kZSAoZWl0aGVyIGEgbnVtYmVyIG9yIGEga2V5IGZyb20gdGhlIHN0eWxlcyBvYmplY3QpXG4gKiBhbmQgcmV0dXJucyB0aGUgdGV4dCB3cmFwcGVkIGluIHRoZSBhcHByb3ByaWF0ZSBBTlNJIGVzY2FwZSBjb2RlcyBmb3IgdGhhdCBzdHlsZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IHRvIGJlIHN0eWxlZC5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nfSBuIC0gVGhlIHN0eWxlIGNvZGUgb3Igc3R5bGUgbmFtZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHRleHQgd3JhcHBlZCBpbiBBTlNJIHN0eWxlIGNvZGVzLlxuICpcbiAqIEBmdW5jdGlvbiBhcHBseVN0eWxlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOlN0eWxlZFN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlTdHlsZSh0ZXh0LCBuKSB7XG4gICAgY29uc3Qgc3R5bGVDb2RlID0gdHlwZW9mIG4gPT09IFwibnVtYmVyXCIgPyBuIDogc3R5bGVzW25dO1xuICAgIHJldHVybiBgXFx4MWJbJHtzdHlsZUNvZGV9bSR7dGV4dH0ke0Fuc2lSZXNldH1gO1xufVxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVtb3ZlcyBhbGwgQU5TSSBmb3JtYXR0aW5nIGNvZGVzIGZyb20gdGV4dC5cbiAqIEBzdW1tYXJ5IFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBzdHJpbmcgdGhhdCBtYXkgY29udGFpbiBBTlNJIGVzY2FwZSBjb2RlcyBmb3IgZm9ybWF0dGluZ1xuICogYW5kIHJldHVybnMgYSBuZXcgc3RyaW5nIHdpdGggYWxsIHN1Y2ggY29kZXMgcmVtb3ZlZCwgbGVhdmluZyBvbmx5IHRoZSBwbGFpbiB0ZXh0IGNvbnRlbnQuXG4gKiBJdCB1c2VzIGEgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIGFuZCByZW1vdmUgQU5TSSBlc2NhcGUgc2VxdWVuY2VzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgcG90ZW50aWFsbHkgY29udGFpbmluZyBBTlNJIGZvcm1hdHRpbmcgY29kZXMuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBpbnB1dCB0ZXh0IHdpdGggYWxsIEFOU0kgZm9ybWF0dGluZyBjb2RlcyByZW1vdmVkLlxuICpcbiAqIEBmdW5jdGlvbiBjbGVhclxuICogQG1lbWJlck9mIG1vZHVsZTpTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyKHRleHQpIHtcbiAgICAvLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggQU5TSSBlc2NhcGUgY29kZXNcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleFxuICAgIGNvbnN0IGFuc2lSZWdleCA9IC9cXHgxQig/OltALVpcXFxcLV9dfFxcW1swLT9dKlsgLS9dKltALX5dKS9nO1xuICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoYW5zaVJlZ2V4LCAnJyk7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIHJhdyBBTlNJIGVzY2FwZSBjb2RlcyB0byB0ZXh0LlxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHN0cmluZyBhbmQgYSByYXcgQU5TSSBlc2NhcGUgY29kZSwgYW5kIHJldHVybnMgdGhlIHRleHRcbiAqIHdyYXBwZWQgaW4gdGhlIHByb3ZpZGVkIHJhdyBBTlNJIGNvZGUgYW5kIHRoZSByZXNldCBjb2RlLiBUaGlzIGFsbG93cyBmb3IgYXBwbHlpbmcgY3VzdG9tXG4gKiBvciBjb21wbGV4IEFOU0kgZm9ybWF0dGluZyB0aGF0IG1heSBub3QgYmUgY292ZXJlZCBieSBvdGhlciB1dGlsaXR5IGZ1bmN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IHRvIGJlIGZvcm1hdHRlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSByYXcgLSBUaGUgcmF3IEFOU0kgZXNjYXBlIGNvZGUgdG8gYmUgYXBwbGllZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHRleHQgd3JhcHBlZCBpbiB0aGUgcmF3IEFOU0kgY29kZSBhbmQgdGhlIHJlc2V0IGNvZGUuXG4gKlxuICogQGZ1bmN0aW9uIHJhd1xuICogQG1lbWJlck9mIG1vZHVsZTpTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhdyh0ZXh0LCByYXcpIHtcbiAgICByZXR1cm4gYCR7cmF3fSR7dGV4dH0ke0Fuc2lSZXNldH1gO1xufVxuIiwiaW1wb3J0IHsgQnJpZ2h0QmFja2dyb3VuZENvbG9ycywgQnJpZ2h0Rm9yZWdyb3VuZENvbG9ycywgU3RhbmRhcmRCYWNrZ3JvdW5kQ29sb3JzLCBTdGFuZGFyZEZvcmVncm91bmRDb2xvcnMsIHN0eWxlcywgfSBmcm9tIFwiLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IGNsZWFyLCBjb2xvcml6ZTI1NiwgY29sb3JpemVBTlNJLCBjb2xvcml6ZVJHQiwgcmF3LCBhcHBseVN0eWxlLCB9IGZyb20gXCIuL2NvbG9ycy5qc1wiO1xuLyoqXG4gKiBAY2xhc3MgU3R5bGVkU3RyaW5nXG4gKiBAZGVzY3JpcHRpb24gQSBjbGFzcyB0aGF0IGV4dGVuZHMgc3RyaW5nIGZ1bmN0aW9uYWxpdHkgd2l0aCBBTlNJIGNvbG9yIGFuZCBzdHlsZSBvcHRpb25zLlxuICogQHN1bW1hcnkgU3R5bGVkU3RyaW5nIHByb3ZpZGVzIG1ldGhvZHMgdG8gYXBwbHkgdmFyaW91cyBBTlNJIGNvbG9yIGFuZCBzdHlsZSBvcHRpb25zIHRvIHRleHQgc3RyaW5ncy5cbiAqIEl0IGltcGxlbWVudHMgdGhlIENvbG9yaXplT3B0aW9ucyBpbnRlcmZhY2UgYW5kIHByb3hpZXMgbmF0aXZlIHN0cmluZyBtZXRob2RzIHRvIHRoZSB1bmRlcmx5aW5nIHRleHQuXG4gKiBUaGlzIGNsYXNzIGFsbG93cyBmb3IgY2hhaW5pbmcgb2Ygc3R5bGluZyBtZXRob2RzIGFuZCBlYXN5IGFwcGxpY2F0aW9uIG9mIGNvbG9ycyBhbmQgc3R5bGVzIHRvIHRleHQuXG4gKlxuICogQGltcGxlbWVudHMge0NvbG9yaXplT3B0aW9uc31cbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIGluaXRpYWwgdGV4dCBzdHJpbmcgdG8gYmUgc3R5bGVkLlxuICovXG5leHBvcnQgY2xhc3MgU3R5bGVkU3RyaW5nIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZXh0KSB7XG4gICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgICAgIC8vIEJhc2ljIGNvbG9yc1xuICAgICAgICBPYmplY3QuZW50cmllcyhTdGFuZGFyZEZvcmVncm91bmRDb2xvcnMpLmZvckVhY2goKFtuYW1lLCBjb2RlXSkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIG5hbWUsIHtcbiAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHRoaXMuZm9yZWdyb3VuZChjb2RlKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoQnJpZ2h0Rm9yZWdyb3VuZENvbG9ycykuZm9yRWFjaCgoW25hbWUsIGNvZGVdKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgbmFtZSwge1xuICAgICAgICAgICAgICAgIGdldDogKCkgPT4gdGhpcy5mb3JlZ3JvdW5kKGNvZGUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBCYWNrZ3JvdW5kIGNvbG9yc1xuICAgICAgICBPYmplY3QuZW50cmllcyhTdGFuZGFyZEJhY2tncm91bmRDb2xvcnMpLmZvckVhY2goKFtuYW1lLCBjb2RlXSkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIG5hbWUsIHtcbiAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHRoaXMuYmFja2dyb3VuZChjb2RlKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoQnJpZ2h0QmFja2dyb3VuZENvbG9ycykuZm9yRWFjaCgoW25hbWUsIGNvZGVdKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgbmFtZSwge1xuICAgICAgICAgICAgICAgIGdldDogKCkgPT4gdGhpcy5iYWNrZ3JvdW5kKGNvZGUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBTdHlsZXNcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoc3R5bGVzKS5mb3JFYWNoKChbbmFtZSwgY29kZV0pID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBuYW1lLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLnN0eWxlKGNvZGUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2xlYXJzIGFsbCBzdHlsaW5nIGZyb20gdGhlIHRleHQuXG4gICAgICogQHN1bW1hcnkgUmVtb3ZlcyBhbGwgQU5TSSBjb2xvciBhbmQgc3R5bGUgY29kZXMgZnJvbSB0aGUgdGV4dC5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCBjbGVhcmVkIHN0eWxpbmcuXG4gICAgICovXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IGNsZWFyKHRoaXMudGV4dCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQXBwbGllcyByYXcgQU5TSSBjb2RlcyB0byB0aGUgdGV4dC5cbiAgICAgKiBAc3VtbWFyeSBBbGxvd3MgZGlyZWN0IGFwcGxpY2F0aW9uIG9mIEFOU0kgZXNjYXBlIHNlcXVlbmNlcyB0byB0aGUgdGV4dC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmF3QW5zaSAtIFRoZSByYXcgQU5TSSBlc2NhcGUgc2VxdWVuY2UgdG8gYXBwbHkuXG4gICAgICogQHJldHVybiB7U3R5bGVkU3RyaW5nfSBUaGUgU3R5bGVkU3RyaW5nIGluc3RhbmNlIHdpdGggdGhlIHJhdyBBTlNJIGNvZGUgYXBwbGllZC5cbiAgICAgKi9cbiAgICByYXcocmF3QW5zaSkge1xuICAgICAgICB0aGlzLnRleHQgPSByYXcodGhpcy50ZXh0LCByYXdBbnNpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGEgZm9yZWdyb3VuZCBjb2xvciB0byB0aGUgdGV4dC5cbiAgICAgKiBAc3VtbWFyeSBTZXRzIHRoZSB0ZXh0IGNvbG9yIHVzaW5nIEFOU0kgY29sb3IgY29kZXMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gLSBUaGUgQU5TSSBjb2xvciBjb2RlIGZvciB0aGUgZm9yZWdyb3VuZCBjb2xvci5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCB0aGUgZm9yZWdyb3VuZCBjb2xvciBhcHBsaWVkLlxuICAgICAqL1xuICAgIGZvcmVncm91bmQobikge1xuICAgICAgICB0aGlzLnRleHQgPSBjb2xvcml6ZUFOU0kodGhpcy50ZXh0LCBuKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGEgYmFja2dyb3VuZCBjb2xvciB0byB0aGUgdGV4dC5cbiAgICAgKiBAc3VtbWFyeSBTZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSB0ZXh0IHVzaW5nIEFOU0kgY29sb3IgY29kZXMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gLSBUaGUgQU5TSSBjb2xvciBjb2RlIGZvciB0aGUgYmFja2dyb3VuZCBjb2xvci5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCB0aGUgYmFja2dyb3VuZCBjb2xvciBhcHBsaWVkLlxuICAgICAqL1xuICAgIGJhY2tncm91bmQobikge1xuICAgICAgICB0aGlzLnRleHQgPSBjb2xvcml6ZUFOU0kodGhpcy50ZXh0LCBuLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGEgdGV4dCBzdHlsZSB0byB0aGUgc3RyaW5nLlxuICAgICAqIEBzdW1tYXJ5IFNldHMgdGV4dCBzdHlsZXMgc3VjaCBhcyBib2xkLCBpdGFsaWMsIG9yIHVuZGVybGluZSB1c2luZyBBTlNJIHN0eWxlIGNvZGVzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nfSBuIC0gVGhlIHN0eWxlIGNvZGUgb3Iga2V5IGZyb20gdGhlIHN0eWxlcyBvYmplY3QuXG4gICAgICogQHJldHVybiB7U3R5bGVkU3RyaW5nfSBUaGUgU3R5bGVkU3RyaW5nIGluc3RhbmNlIHdpdGggdGhlIHN0eWxlIGFwcGxpZWQuXG4gICAgICovXG4gICAgc3R5bGUobikge1xuICAgICAgICBpZiAodHlwZW9mIG4gPT09IFwic3RyaW5nXCIgJiYgIShuIGluIHN0eWxlcykpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgSW52YWxpZCBzdHlsZTogJHtufWApO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50ZXh0ID0gYXBwbHlTdHlsZSh0aGlzLnRleHQsIG4pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgYSAyNTYtY29sb3IgZm9yZWdyb3VuZCBjb2xvciB0byB0aGUgdGV4dC5cbiAgICAgKiBAc3VtbWFyeSBTZXRzIHRoZSB0ZXh0IGNvbG9yIHVzaW5nIHRoZSBleHRlbmRlZCAyNTYtY29sb3IgcGFsZXR0ZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiAtIFRoZSBjb2xvciBudW1iZXIgZnJvbSB0aGUgMjU2LWNvbG9yIHBhbGV0dGUuXG4gICAgICogQHJldHVybiB7U3R5bGVkU3RyaW5nfSBUaGUgU3R5bGVkU3RyaW5nIGluc3RhbmNlIHdpdGggdGhlIDI1Ni1jb2xvciBmb3JlZ3JvdW5kIGFwcGxpZWQuXG4gICAgICovXG4gICAgY29sb3IyNTYobikge1xuICAgICAgICB0aGlzLnRleHQgPSBjb2xvcml6ZTI1Nih0aGlzLnRleHQsIG4pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgYSAyNTYtY29sb3IgYmFja2dyb3VuZCBjb2xvciB0byB0aGUgdGV4dC5cbiAgICAgKiBAc3VtbWFyeSBTZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIHVzaW5nIHRoZSBleHRlbmRlZCAyNTYtY29sb3IgcGFsZXR0ZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiAtIFRoZSBjb2xvciBudW1iZXIgZnJvbSB0aGUgMjU2LWNvbG9yIHBhbGV0dGUuXG4gICAgICogQHJldHVybiB7U3R5bGVkU3RyaW5nfSBUaGUgU3R5bGVkU3RyaW5nIGluc3RhbmNlIHdpdGggdGhlIDI1Ni1jb2xvciBiYWNrZ3JvdW5kIGFwcGxpZWQuXG4gICAgICovXG4gICAgYmdDb2xvcjI1NihuKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IGNvbG9yaXplMjU2KHRoaXMudGV4dCwgbiwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQXBwbGllcyBhbiBSR0IgZm9yZWdyb3VuZCBjb2xvciB0byB0aGUgdGV4dC5cbiAgICAgKiBAc3VtbWFyeSBTZXRzIHRoZSB0ZXh0IGNvbG9yIHVzaW5nIFJHQiB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHIgLSBUaGUgcmVkIGNvbXBvbmVudCAoMC0yNTUpLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBnIC0gVGhlIGdyZWVuIGNvbXBvbmVudCAoMC0yNTUpLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiIC0gVGhlIGJsdWUgY29tcG9uZW50ICgwLTI1NSkuXG4gICAgICogQHJldHVybiB7U3R5bGVkU3RyaW5nfSBUaGUgU3R5bGVkU3RyaW5nIGluc3RhbmNlIHdpdGggdGhlIFJHQiBmb3JlZ3JvdW5kIGNvbG9yIGFwcGxpZWQuXG4gICAgICovXG4gICAgcmdiKHIsIGcsIGIpIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gY29sb3JpemVSR0IodGhpcy50ZXh0LCByLCBnLCBiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGFuIFJHQiBiYWNrZ3JvdW5kIGNvbG9yIHRvIHRoZSB0ZXh0LlxuICAgICAqIEBzdW1tYXJ5IFNldHMgdGhlIGJhY2tncm91bmQgY29sb3IgdXNpbmcgUkdCIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gciAtIFRoZSByZWQgY29tcG9uZW50ICgwLTI1NSkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGcgLSBUaGUgZ3JlZW4gY29tcG9uZW50ICgwLTI1NSkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGIgLSBUaGUgYmx1ZSBjb21wb25lbnQgKDAtMjU1KS5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCB0aGUgUkdCIGJhY2tncm91bmQgY29sb3IgYXBwbGllZC5cbiAgICAgKi9cbiAgICBiZ1JnYihyLCBnLCBiKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IGNvbG9yaXplUkdCKHRoaXMudGV4dCwgciwgZywgYiwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIFN0eWxlZFN0cmluZyB0byBhIHJlZ3VsYXIgc3RyaW5nLlxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIHVuZGVybHlpbmcgdGV4dCB3aXRoIGFsbCBhcHBsaWVkIHN0eWxpbmcuXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3R5bGVkIHRleHQgYXMgYSByZWd1bGFyIHN0cmluZy5cbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dDtcbiAgICB9XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIHN0eWxpbmcgdG8gYSBnaXZlbiB0ZXh0IHN0cmluZy5cbiAqIEBzdW1tYXJ5IFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBzdHJpbmcgYW5kIHJldHVybnMgYSBTdHlsZWRTdHJpbmcgb2JqZWN0LCB3aGljaCBpcyBhbiBlbmhhbmNlZFxuICogdmVyc2lvbiBvZiB0aGUgb3JpZ2luYWwgc3RyaW5nIHdpdGggYWRkaXRpb25hbCBtZXRob2RzIGZvciBhcHBseWluZyB2YXJpb3VzIEFOU0kgY29sb3IgYW5kIHN0eWxlXG4gKiBvcHRpb25zLiBJdCBzZXRzIHVwIGEgbWFwcGVyIG9iamVjdCB3aXRoIG1ldGhvZHMgZm9yIGRpZmZlcmVudCBzdHlsaW5nIG9wZXJhdGlvbnMgYW5kIHRoZW5cbiAqIGRlZmluZXMgcHJvcGVydGllcyBvbiB0aGUgdGV4dCBzdHJpbmcgdG8gbWFrZSB0aGVzZSBtZXRob2RzIGFjY2Vzc2libGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gdCAgVGhlIGlucHV0IHRleHQgdG8gYmUgc3R5bGVkLlxuICogQHJldHVybiB7U3R5bGVkU3RyaW5nfSBBIFN0eWxlZFN0cmluZyBvYmplY3Qgd2l0aCBhZGRpdGlvbmFsIHN0eWxpbmcgbWV0aG9kcy5cbiAqXG4gKiBAZnVuY3Rpb24gc3R5bGVcbiAqXG4gKiBAbWVtYmVyT2YgU3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHlsZSguLi50KSB7XG4gICAgcmV0dXJuIG5ldyBTdHlsZWRTdHJpbmcodC5qb2luKFwiIFwiKSk7XG59XG4iLCJpbXBvcnQgeyBzdHlsZSB9IGZyb20gXCJzdHlsZWQtc3RyaW5nLWJ1aWxkZXJcIjtcbmltcG9ydCB7IERlZmF1bHRMb2dnaW5nQ29uZmlnLCBEZWZhdWx0VGhlbWUsIExvZ0xldmVsLCBOdW1lcmljTG9nTGV2ZWxzLCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gQSBtaW5pbWFsIGxvZ2dlciBpbXBsZW1lbnRhdGlvbi5cbiAqIEBzdW1tYXJ5IE1pbmlMb2dnZXIgaXMgYSBsaWdodHdlaWdodCBsb2dnaW5nIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgVmVyYm9zaXR5TG9nZ2VyIGludGVyZmFjZS5cbiAqIEl0IHByb3ZpZGVzIGJhc2ljIGxvZ2dpbmcgZnVuY3Rpb25hbGl0eSB3aXRoIHN1cHBvcnQgZm9yIGRpZmZlcmVudCBsb2cgbGV2ZWxzIGFuZCB2ZXJib3NpdHkuXG4gKlxuICogQGNsYXNzXG4gKi9cbmV4cG9ydCBjbGFzcyBNaW5pTG9nZ2VyIHtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBNaW5pTG9nZ2VyIGluc3RhbmNlLlxuICAgICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgTWluaUxvZ2dlciB3aXRoIHRoZSBnaXZlbiBjbGFzcyBuYW1lLCBvcHRpb25hbCBjb25maWd1cmF0aW9uLCBhbmQgbWV0aG9kIG5hbWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyB1c2luZyB0aGlzIGxvZ2dlci5cbiAgICAgKiBAcGFyYW0gW2NvbmZdIC0gT3B0aW9uYWwgbG9nZ2luZyBjb25maWd1cmF0aW9uLiBEZWZhdWx0cyB0byBJbmZvIGxldmVsIGFuZCB2ZXJib3NpdHkgMC5cbiAgICAgKiBAcGFyYW0gW2lkXSAtIE9wdGlvbmFsIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgbG9nZ2VyIGluc3RhbmNlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQsIGNvbmYpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgdGhpcy5jb25mID0gY29uZjtcbiAgICB9XG4gICAgY29uZmlnKGtleSkge1xuICAgICAgICBpZiAodGhpcy5jb25mICYmIGtleSBpbiB0aGlzLmNvbmYpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25mW2tleV07XG4gICAgICAgIHJldHVybiBMb2dnaW5nLmdldENvbmZpZygpW2tleV07XG4gICAgfVxuICAgIGZvcihtZXRob2QsIGNvbmZpZywgLi4uYXJncykge1xuICAgICAgICBtZXRob2QgPSBtZXRob2RcbiAgICAgICAgICAgID8gdHlwZW9mIG1ldGhvZCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgID8gbWV0aG9kXG4gICAgICAgICAgICAgICAgOiBtZXRob2QubmFtZVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBMb2dnaW5nLmZvcihbdGhpcy5jb250ZXh0LCBtZXRob2RdLmpvaW4oXCIuXCIpLCBjb25maWcsIC4uLmFyZ3MpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIGZvcm1hdHRlZCBsb2cgc3RyaW5nLlxuICAgICAqIEBzdW1tYXJ5IEdlbmVyYXRlcyBhIGxvZyBzdHJpbmcgd2l0aCB0aW1lc3RhbXAsIGNvbG9yZWQgbG9nIGxldmVsLCBhbmQgbWVzc2FnZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsZXZlbCAtIFRoZSBsb2cgbGV2ZWwgYXMgYSBzdHJpbmcuXG4gICAgICogQHBhcmFtIG1lc3NhZ2VcbiAgICAgKiBAcGFyYW0gc3RhY2tcbiAgICAgKiBAcmV0dXJuIEEgZm9ybWF0dGVkIGxvZyBzdHJpbmcuXG4gICAgICovXG4gICAgY3JlYXRlTG9nKGxldmVsLCBtZXNzYWdlLCBzdGFjaykge1xuICAgICAgICBjb25zdCBsb2cgPSBbXTtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSB0aGlzLmNvbmZpZyhcInN0eWxlXCIpO1xuICAgICAgICBpZiAodGhpcy5jb25maWcoXCJ0aW1lc3RhbXBcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBzdHlsZSA/IExvZ2dpbmcudGhlbWUoZGF0ZSwgXCJ0aW1lc3RhbXBcIiwgbGV2ZWwpIDogZGF0ZTtcbiAgICAgICAgICAgIGxvZy5wdXNoKHRpbWVzdGFtcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnKFwibG9nTGV2ZWxcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IGx2bCA9IHN0eWxlXG4gICAgICAgICAgICAgICAgPyBMb2dnaW5nLnRoZW1lKGxldmVsLCBcImxvZ0xldmVsXCIsIGxldmVsKVxuICAgICAgICAgICAgICAgIDogbGV2ZWw7XG4gICAgICAgICAgICBsb2cucHVzaChsdmwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZyhcImNvbnRleHRcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBzdHlsZVxuICAgICAgICAgICAgICAgID8gTG9nZ2luZy50aGVtZSh0aGlzLmNvbnRleHQsIFwiY2xhc3NcIiwgbGV2ZWwpXG4gICAgICAgICAgICAgICAgOiB0aGlzLmNvbnRleHQ7XG4gICAgICAgICAgICBsb2cucHVzaChjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb25maWcoXCJjb3JyZWxhdGlvbklkXCIpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBzdHlsZVxuICAgICAgICAgICAgICAgICAgICA/IExvZ2dpbmcudGhlbWUodGhpcy5jb25maWcoXCJjb3JyZWxhdGlvbklkXCIpLnRvU3RyaW5nKCksIFwiaWRcIiwgbGV2ZWwpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5jb25maWcoXCJjb3JyZWxhdGlvbklkXCIpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgbG9nLnB1c2goaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1zZyA9IHN0eWxlXG4gICAgICAgICAgICA/IExvZ2dpbmcudGhlbWUodHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgPyBtZXNzYWdlIDogbWVzc2FnZS5tZXNzYWdlLCBcIm1lc3NhZ2VcIiwgbGV2ZWwpXG4gICAgICAgICAgICA6IHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgPyBtZXNzYWdlXG4gICAgICAgICAgICAgICAgOiBtZXNzYWdlLm1lc3NhZ2U7XG4gICAgICAgIGxvZy5wdXNoKG1zZyk7XG4gICAgICAgIGlmIChzdGFjayB8fCBtZXNzYWdlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHN0YWNrID0gc3R5bGVcbiAgICAgICAgICAgICAgICA/IExvZ2dpbmcudGhlbWUoKHN0YWNrIHx8IG1lc3NhZ2Uuc3RhY2spLCBcInN0YWNrXCIsIGxldmVsKVxuICAgICAgICAgICAgICAgIDogc3RhY2s7XG4gICAgICAgICAgICBsb2cucHVzaChgXFxuU3RhY2sgdHJhY2U6XFxuJHtzdGFja31gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nLmpvaW4odGhpcy5jb25maWcoXCJzZXBhcmF0b3JcIikpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhIG1lc3NhZ2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGxvZyBsZXZlbC5cbiAgICAgKiBAc3VtbWFyeSBDaGVja3MgaWYgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGxvZ2dlZCBiYXNlZCBvbiB0aGUgY3VycmVudCBsb2cgbGV2ZWwsXG4gICAgICogdGhlbiB1c2VzIHRoZSBhcHByb3ByaWF0ZSBjb25zb2xlIG1ldGhvZCB0byBvdXRwdXQgdGhlIGxvZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsZXZlbCAtIFRoZSBsb2cgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UuXG4gICAgICogQHBhcmFtIG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZC5cbiAgICAgKiBAcGFyYW0gc3RhY2tcbiAgICAgKi9cbiAgICBsb2cobGV2ZWwsIG1zZywgc3RhY2spIHtcbiAgICAgICAgaWYgKE51bWVyaWNMb2dMZXZlbHNbdGhpcy5jb25maWcoXCJsZXZlbFwiKV0gPFxuICAgICAgICAgICAgTnVtZXJpY0xvZ0xldmVsc1tsZXZlbF0pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxldCBtZXRob2Q7XG4gICAgICAgIHN3aXRjaCAobGV2ZWwpIHtcbiAgICAgICAgICAgIGNhc2UgTG9nTGV2ZWwuaW5mbzpcbiAgICAgICAgICAgICAgICBtZXRob2QgPSBjb25zb2xlLmxvZztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTG9nTGV2ZWwudmVyYm9zZTpcbiAgICAgICAgICAgIGNhc2UgTG9nTGV2ZWwuZGVidWc6XG4gICAgICAgICAgICAgICAgbWV0aG9kID0gY29uc29sZS5kZWJ1ZztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTG9nTGV2ZWwuZXJyb3I6XG4gICAgICAgICAgICAgICAgbWV0aG9kID0gY29uc29sZS5lcnJvcjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBsb2cgbGV2ZWxcIik7XG4gICAgICAgIH1cbiAgICAgICAgbWV0aG9kKHRoaXMuY3JlYXRlTG9nKGxldmVsLCBtc2csIHN0YWNrKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBMTG9ncyBhIGB3YXkgdG9vIHZlcmJvc2VgIG9yIGEgc2lsbHkgbWVzc2FnZS5cbiAgICAgKiBAc3VtbWFyeSBMb2dzIGEgbWVzc2FnZSBhdCB0aGUgU2lsbHkgbGV2ZWwgaWYgdGhlIGN1cnJlbnQgdmVyYm9zaXR5IGFsbG93cyBpdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQuXG4gICAgICogQHBhcmFtIHZlcmJvc2l0eSAtIFRoZSB2ZXJib3NpdHkgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UgKGRlZmF1bHQ6IDApLlxuICAgICAqL1xuICAgIHNpbGx5KG1zZywgdmVyYm9zaXR5ID0gMCkge1xuICAgICAgICBpZiAodGhpcy5jb25maWcoXCJ2ZXJib3NlXCIpID49IHZlcmJvc2l0eSlcbiAgICAgICAgICAgIHRoaXMubG9nKExvZ0xldmVsLnZlcmJvc2UsIG1zZyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBMb2dzIGEgdmVyYm9zZSBtZXNzYWdlLlxuICAgICAqIEBzdW1tYXJ5IExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBWZXJib3NlIGxldmVsIGlmIHRoZSBjdXJyZW50IHZlcmJvc2l0eSBhbGxvd3MgaXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbXNnIC0gVGhlIG1lc3NhZ2UgdG8gYmUgbG9nZ2VkLlxuICAgICAqIEBwYXJhbSB2ZXJib3NpdHkgLSBUaGUgdmVyYm9zaXR5IGxldmVsIG9mIHRoZSBtZXNzYWdlIChkZWZhdWx0OiAwKS5cbiAgICAgKi9cbiAgICB2ZXJib3NlKG1zZywgdmVyYm9zaXR5ID0gMCkge1xuICAgICAgICBpZiAodGhpcy5jb25maWcoXCJ2ZXJib3NlXCIpID49IHZlcmJvc2l0eSlcbiAgICAgICAgICAgIHRoaXMubG9nKExvZ0xldmVsLnZlcmJvc2UsIG1zZyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBMb2dzIGFuIGluZm8gbWVzc2FnZS5cbiAgICAgKiBAc3VtbWFyeSBMb2dzIGEgbWVzc2FnZSBhdCB0aGUgSW5mbyBsZXZlbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQuXG4gICAgICovXG4gICAgaW5mbyhtc2cpIHtcbiAgICAgICAgdGhpcy5sb2coTG9nTGV2ZWwuaW5mbywgbXNnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBkZWJ1ZyBtZXNzYWdlLlxuICAgICAqIEBzdW1tYXJ5IExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBEZWJ1ZyBsZXZlbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQuXG4gICAgICovXG4gICAgZGVidWcobXNnKSB7XG4gICAgICAgIHRoaXMubG9nKExvZ0xldmVsLmRlYnVnLCBtc2cpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhbiBlcnJvciBtZXNzYWdlLlxuICAgICAqIEBzdW1tYXJ5IExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBFcnJvciBsZXZlbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQuXG4gICAgICovXG4gICAgZXJyb3IobXNnKSB7XG4gICAgICAgIHRoaXMubG9nKExvZ0xldmVsLmVycm9yLCBtc2cpO1xuICAgIH1cbiAgICBzZXRDb25maWcoY29uZmlnKSB7XG4gICAgICAgIHRoaXMuY29uZiA9IHsgLi4uKHRoaXMuY29uZiB8fCB7fSksIC4uLmNvbmZpZyB9O1xuICAgIH1cbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIEEgc3RhdGljIGNsYXNzIGZvciBtYW5hZ2luZyBsb2dnaW5nIG9wZXJhdGlvbnMuXG4gKiBAc3VtbWFyeSBUaGUgTG9nZ2luZyBjbGFzcyBwcm92aWRlcyBhIGNlbnRyYWxpemVkIGxvZ2dpbmcgbWVjaGFuaXNtIHdpdGggc3VwcG9ydCBmb3JcbiAqIGRpZmZlcmVudCBsb2cgbGV2ZWxzIGFuZCB2ZXJib3NpdHkuIEl0IHVzZXMgYSBzaW5nbGV0b24gcGF0dGVybiB0byBtYWludGFpbiBhIGdsb2JhbFxuICogbG9nZ2VyIGluc3RhbmNlIGFuZCBhbGxvd3MgY3JlYXRpbmcgc3BlY2lmaWMgbG9nZ2VycyBmb3IgZGlmZmVyZW50IGNsYXNzZXMgYW5kIG1ldGhvZHMuXG4gKlxuICogQGNsYXNzXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2dnaW5nIHtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRmFjdG9yeSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgbG9nZ2VyIGluc3RhbmNlcy5cbiAgICAgKiBAc3VtbWFyeSBBIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBuZXcgVmVyYm9zaXR5TG9nZ2VyIGluc3RhbmNlcy4gQnkgZGVmYXVsdCwgaXQgY3JlYXRlcyBhIE1pbmlMb2dnZXIuXG4gICAgICovXG4gICAgc3RhdGljIHsgdGhpcy5fZmFjdG9yeSA9IChvYmplY3QsIGNvbmZpZykgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IE1pbmlMb2dnZXIob2JqZWN0LCBjb25maWcpO1xuICAgIH07IH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29uZmlndXJhdGlvbiBmb3IgdGhlIGxvZ2dpbmcgc3lzdGVtLlxuICAgICAqIEBzdW1tYXJ5IFN0b3JlcyB0aGUgZ2xvYmFsIHZlcmJvc2l0eSBsZXZlbCBhbmQgbG9nIGxldmVsIHNldHRpbmdzLlxuICAgICAqL1xuICAgIHN0YXRpYyB7IHRoaXMuX2NvbmZpZyA9IERlZmF1bHRMb2dnaW5nQ29uZmlnOyB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFByaXZhdGUgY29uc3RydWN0b3IgdG8gcHJldmVudCBpbnN0YW50aWF0aW9uLlxuICAgICAqIEBzdW1tYXJ5IEVuc3VyZXMgdGhhdCB0aGUgTG9nZ2luZyBjbGFzcyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIGFzIGl0J3MgZGVzaWduZWQgdG8gYmUgdXNlZCBzdGF0aWNhbGx5LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCkgeyB9XG4gICAgc3RhdGljIHNldEZhY3RvcnkoZmFjdG9yeSkge1xuICAgICAgICBMb2dnaW5nLl9mYWN0b3J5ID0gZmFjdG9yeTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFNldHRlciBmb3IgdGhlIGxvZ2dpbmcgY29uZmlndXJhdGlvbi5cbiAgICAgKiBAc3VtbWFyeSBBbGxvd3MgdXBkYXRpbmcgdGhlIGdsb2JhbCBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29uZmlnIC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdmVyYm9zaXR5IGFuZCBsb2cgbGV2ZWwgc2V0dGluZ3MuXG4gICAgICovXG4gICAgc3RhdGljIHNldENvbmZpZyhjb25maWcpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLl9jb25maWcsIGNvbmZpZyk7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRDb25maWcoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9jb25maWcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIG9yIGNyZWF0ZXMgdGhlIGdsb2JhbCBsb2dnZXIgaW5zdGFuY2UuXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyB0aGUgZXhpc3RpbmcgZ2xvYmFsIGxvZ2dlciBvciBjcmVhdGVzIGEgbmV3IG9uZSBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICAgICAqXG4gICAgICogQHJldHVybiBUaGUgZ2xvYmFsIFZlcmJvc2l0eUxvZ2dlciBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0KCkge1xuICAgICAgICB0aGlzLmdsb2JhbCA9IHRoaXMuZ2xvYmFsID8gdGhpcy5nbG9iYWwgOiB0aGlzLl9mYWN0b3J5KFwiTG9nZ2luZ1wiKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2xvYmFsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhIHZlcmJvc2UgbWVzc2FnZS5cbiAgICAgKiBAc3VtbWFyeSBEZWxlZ2F0ZXMgdGhlIHZlcmJvc2UgbG9nZ2luZyB0byB0aGUgZ2xvYmFsIGxvZ2dlciBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQuXG4gICAgICogQHBhcmFtIHZlcmJvc2l0eSAtIFRoZSB2ZXJib3NpdHkgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UgKGRlZmF1bHQ6IDApLlxuICAgICAqL1xuICAgIHN0YXRpYyB2ZXJib3NlKG1zZywgdmVyYm9zaXR5ID0gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoKS52ZXJib3NlKG1zZywgdmVyYm9zaXR5KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYW4gaW5mbyBtZXNzYWdlLlxuICAgICAqIEBzdW1tYXJ5IERlbGVnYXRlcyB0aGUgaW5mbyBsb2dnaW5nIHRvIHRoZSBnbG9iYWwgbG9nZ2VyIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZC5cbiAgICAgKi9cbiAgICBzdGF0aWMgaW5mbyhtc2cpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCkuaW5mbyhtc2cpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhIGRlYnVnIG1lc3NhZ2UuXG4gICAgICogQHN1bW1hcnkgRGVsZWdhdGVzIHRoZSBkZWJ1ZyBsb2dnaW5nIHRvIHRoZSBnbG9iYWwgbG9nZ2VyIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZC5cbiAgICAgKi9cbiAgICBzdGF0aWMgZGVidWcobXNnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgpLmRlYnVnKG1zZyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBMb2dzIGEgc2lsbHkgbWVzc2FnZS5cbiAgICAgKiBAc3VtbWFyeSBEZWxlZ2F0ZXMgdGhlIGRlYnVnIGxvZ2dpbmcgdG8gdGhlIGdsb2JhbCBsb2dnZXIgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbXNnIC0gVGhlIG1lc3NhZ2UgdG8gYmUgbG9nZ2VkLlxuICAgICAqL1xuICAgIHN0YXRpYyBzaWxseShtc2cpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCkuc2lsbHkobXNnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYW4gZXJyb3IgbWVzc2FnZS5cbiAgICAgKiBAc3VtbWFyeSBEZWxlZ2F0ZXMgdGhlIGVycm9yIGxvZ2dpbmcgdG8gdGhlIGdsb2JhbCBsb2dnZXIgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbXNnIC0gVGhlIG1lc3NhZ2UgdG8gYmUgbG9nZ2VkLlxuICAgICAqL1xuICAgIHN0YXRpYyBlcnJvcihtc2cpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCkuZXJyb3IobXNnKTtcbiAgICB9XG4gICAgc3RhdGljIGZvcihvYmplY3QsIGNvbmZpZywgLi4uYXJncykge1xuICAgICAgICBvYmplY3QgPVxuICAgICAgICAgICAgdHlwZW9mIG9iamVjdCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgID8gb2JqZWN0XG4gICAgICAgICAgICAgICAgOiBvYmplY3QuY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgPyBvYmplY3QuY29uc3RydWN0b3IubmFtZVxuICAgICAgICAgICAgICAgICAgICA6IG9iamVjdC5uYW1lO1xuICAgICAgICByZXR1cm4gdGhpcy5fZmFjdG9yeShvYmplY3QsIGNvbmZpZywgLi4uYXJncyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbG9nZ2VyIGZvciBhIHNwZWNpZmljIHJlYXNvbiBvciBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHN1bW1hcnkgVGhpcyBzdGF0aWMgbWV0aG9kIGNyZWF0ZXMgYSBuZXcgbG9nZ2VyIGluc3RhbmNlIHVzaW5nIHRoZSBmYWN0b3J5IGZ1bmN0aW9uLFxuICAgICAqIGJhc2VkIG9uIGEgZ2l2ZW4gcmVhc29uIG9yIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVhc29uIC0gQSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgcmVhc29uIG9yIGNvbnRleHQgZm9yIGNyZWF0aW5nIHRoaXMgbG9nZ2VyLlxuICAgICAqIEBwYXJhbSBpZFxuICAgICAqIEByZXR1cm5zIEEgbmV3IFZlcmJvc2l0eUxvZ2dlciBvciBDbGFzc0xvZ2dlciBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBzdGF0aWMgYmVjYXVzZShyZWFzb24sIGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mYWN0b3J5KHJlYXNvbiwgdGhpcy5fY29uZmlnLCBpZCk7XG4gICAgfVxuICAgIHN0YXRpYyB0aGVtZSh0ZXh0LCB0eXBlLCBsb2dnZXJMZXZlbCwgdGVtcGxhdGUgPSBEZWZhdWx0VGhlbWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jb25maWcuc3R5bGUpXG4gICAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgY29uc3QgbG9nZ2VyID0gTG9nZ2luZy5nZXQoKS5mb3IodGhpcy50aGVtZSk7XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5KHR4dCwgb3B0aW9uLCB2YWx1ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ID0gdHh0O1xuICAgICAgICAgICAgICAgIGxldCBjID0gc3R5bGUodCk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXBwbHlDb2xvcih2YWwsIGlzQmcgPSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZiA9IGlzQmcgPyBjLmJhY2tncm91bmQgOiBjLmZvcmVncm91bmQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZi5jYWxsKGMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gaXNCZyA/IGMuYmdDb2xvcjI1NiA6IGMuY29sb3IyNTY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYodmFsWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gaXNCZyA/IGMuYmdSZ2IgOiBjLnJnYjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYy5yZ2IodmFsWzBdLCB2YWxbMV0sIHZhbFsyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgTm90IGEgdmFsaWQgY29sb3Igb3B0aW9uOiAke29wdGlvbn1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3R5bGUodCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXBwbHlTdHlsZSh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGMuc3R5bGUodik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjID0gY1t2XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYmdcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZnXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBwbHlDb2xvcih2YWx1ZSkudGV4dDtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKGFwcGx5U3R5bGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbHlTdHlsZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYy50ZXh0O1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBOb3QgYSB2YWxpZCB0aGVtZSBvcHRpb246ICR7b3B0aW9ufWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBFcnJvciBhcHBseWluZyBzdHlsZTogJHtvcHRpb259IHdpdGggdmFsdWUgJHt2YWx1ZX1gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGl2aWR1YWxUaGVtZSA9IHRlbXBsYXRlW3R5cGVdO1xuICAgICAgICBpZiAoIWluZGl2aWR1YWxUaGVtZSB8fCAhT2JqZWN0LmtleXMoaW5kaXZpZHVhbFRoZW1lKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICB9XG4gICAgICAgIGxldCBhY3R1YWxUaGVtZSA9IGluZGl2aWR1YWxUaGVtZTtcbiAgICAgICAgY29uc3QgbG9nTGV2ZWxzID0gT2JqZWN0LmFzc2lnbih7fSwgTG9nTGV2ZWwpO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoaW5kaXZpZHVhbFRoZW1lKVswXSBpbiBsb2dMZXZlbHMpXG4gICAgICAgICAgICBhY3R1YWxUaGVtZSA9XG4gICAgICAgICAgICAgICAgaW5kaXZpZHVhbFRoZW1lW2xvZ2dlckxldmVsXSB8fCB7fTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGFjdHVhbFRoZW1lKS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSBhY3R1YWxUaGVtZVtrZXldO1xuICAgICAgICAgICAgaWYgKHZhbClcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBwbHkoYWNjLCBrZXksIHZhbCk7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB0ZXh0KTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liRzluWjJsdVp5NXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5c2IyZG5hVzVuTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFWVkJMRTlCUVU4c1JVRkJiVUlzUzBGQlN5eEZRVUZuUWl4TlFVRk5MSFZDUVVGMVFpeERRVUZETzBGQlF6ZEZMRTlCUVU4c1JVRkRUQ3h2UWtGQmIwSXNSVUZEY0VJc1dVRkJXU3hGUVVOYUxGRkJRVkVzUlVGRFVpeG5Ra0ZCWjBJc1IwRkRha0lzVFVGQlRTeGhRVUZoTEVOQlFVTTdRVUZGY2tJN096czdPenRIUVUxSE8wRkJRMGdzVFVGQlRTeFBRVUZQTEZWQlFWVTdTVUZEY2tJN096czdPenM3VDBGUFJ6dEpRVU5JTEZsQlExa3NUMEZCWlN4RlFVTm1MRWxCUVRaQ08xRkJSRGRDTEZsQlFVOHNSMEZCVUN4UFFVRlBMRU5CUVZFN1VVRkRaaXhUUVVGSkxFZEJRVW9zU1VGQlNTeERRVUY1UWp0SlFVTjBReXhEUVVGRE8wbEJSVTBzVFVGQlRTeERRVU5rTEVkQlFYZENPMUZCUlhoQ0xFbEJRVWtzU1VGQlNTeERRVUZETEVsQlFVa3NTVUZCU1N4SFFVRkhMRWxCUVVrc1NVRkJTU3hEUVVGRExFbEJRVWs3V1VGQlJTeFBRVUZQTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGVrUXNUMEZCVHl4UFFVRlBMRU5CUVVNc1UwRkJVeXhGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEYkVNc1EwRkJRenRKUVVWRUxFZEJRVWNzUTBGRFJDeE5RVUV5UXl4RlFVTXpReXhOUVVFclFpeEZRVU12UWl4SFFVRkhMRWxCUVZjN1VVRkZaQ3hOUVVGTkxFZEJRVWNzVFVGQlRUdFpRVU5pTEVOQlFVTXNRMEZCUXl4UFFVRlBMRTFCUVUwc1MwRkJTeXhSUVVGUk8yZENRVU14UWl4RFFVRkRMRU5CUVVNc1RVRkJUVHRuUWtGRFVpeERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrN1dVRkRaaXhEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETzFGQlJXUXNUMEZCVHl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNUVUZCVFN4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRGVFVXNRMEZCUXp0SlFVVkVPenM3T3pzN096dFBRVkZITzBsQlEwOHNVMEZCVXl4RFFVTnFRaXhMUVVGbExFVkJRMllzVDBGQk1rSXNSVUZETTBJc1MwRkJZenRSUVVWa0xFMUJRVTBzUjBGQlJ5eEhRVUZoTEVWQlFVVXNRMEZCUXp0UlFVTjZRaXhOUVVGTkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJRMjVETEVsQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhYUVVGWExFTkJRVU1zUlVGQlJTeERRVUZETzFsQlF6ZENMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNN1dVRkRkRU1zVFVGQlRTeFRRVUZUTEVkQlFVY3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NSVUZCUlN4WFFVRlhMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0WlFVTjZSU3hIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMUZCUTNSQ0xFTkJRVU03VVVGRlJDeEpRVUZKTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExFVkJRVVVzUTBGQlF6dFpRVU0xUWl4TlFVRk5MRWRCUVVjc1IwRkJWeXhMUVVGTE8yZENRVU4yUWl4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVWQlFVVXNWVUZCVlN4RlFVRkZMRXRCUVVzc1EwRkJRenRuUWtGRGVrTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJRenRaUVVOV0xFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRhRUlzUTBGQlF6dFJRVVZFTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhUUVVGVExFTkJRVU1zUlVGQlJTeERRVUZETzFsQlF6TkNMRTFCUVUwc1QwRkJUeXhIUVVGWExFdEJRVXM3WjBKQlF6TkNMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUTBGQlF6dG5Ra0ZETjBNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTTdXVUZEYWtJc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTndRaXhEUVVGRE8xRkJSVVFzU1VGQlNTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMR1ZCUVdVc1EwRkJReXhGUVVGRkxFTkJRVU03V1VGRGFrTXNRMEZCUXp0blFrRkRReXhOUVVGTkxFVkJRVVVzUjBGQlZ5eExRVUZMTzI5Q1FVTjBRaXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExHVkJRV1VzUTBGQlJTeERRVUZETEZGQlFWRXNSVUZCUlN4RlFVRkZMRWxCUVVrc1JVRkJSU3hMUVVGTExFTkJRVU03YjBKQlEzUkZMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEdWQlFXVXNRMEZCUlN4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8yZENRVU0zUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFsQlEyWXNRMEZCUXp0UlFVTklMRU5CUVVNN1VVRkZSQ3hOUVVGTkxFZEJRVWNzUjBGQlZ5eExRVUZMTzFsQlEzWkNMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVU5ZTEU5QlFVOHNUMEZCVHl4TFFVRkxMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUlN4UFFVRnBRaXhEUVVGRExFOUJRVThzUlVGRGJFVXNVMEZCVXl4RlFVTlVMRXRCUVVzc1EwRkRUanRaUVVOSUxFTkJRVU1zUTBGQlF5eFBRVUZQTEU5QlFVOHNTMEZCU3l4UlFVRlJPMmRDUVVNelFpeERRVUZETEVOQlFVTXNUMEZCVHp0blFrRkRWQ3hEUVVGRExFTkJRVVVzVDBGQmFVSXNRMEZCUXl4UFFVRlBMRU5CUVVNN1VVRkRha01zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOa0xFbEJRVWtzUzBGQlN5eEpRVUZKTEU5QlFVOHNXVUZCV1N4TFFVRkxMRVZCUVVVc1EwRkJRenRaUVVOMFF5eExRVUZMTEVkQlFVY3NTMEZCU3p0blFrRkRXQ3hEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZEV0N4RFFVRkRMRXRCUVVzc1NVRkJTeXhQUVVGcFFpeERRVUZETEV0QlFVc3NRMEZCVnl4RlFVTTNReXhQUVVGUExFVkJRMUFzUzBGQlN5eERRVU5PTzJkQ1FVTklMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU03V1VGRFZpeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRzFDUVVGdFFpeExRVUZMTEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTNaRExFTkJRVU03VVVGRlJDeFBRVUZQTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVOQlFWY3NRMEZCUXl4RFFVRkRPMGxCUTNSRUxFTkJRVU03U1VGRlJEczdPenM3T3pzN1QwRlJSenRKUVVOUExFZEJRVWNzUTBGRFdDeExRVUZsTEVWQlEyWXNSMEZCZFVJc1JVRkRka0lzUzBGQll6dFJRVVZrTEVsQlEwVXNaMEpCUVdkQ0xFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVdFc1EwRkJRenRaUVVOc1JDeG5Ra0ZCWjBJc1EwRkJReXhMUVVGTExFTkJRVU03V1VGRmRrSXNUMEZCVHp0UlFVTlVMRWxCUVVrc1RVRkJUU3hEUVVGRE8xRkJRMWdzVVVGQlVTeExRVUZMTEVWQlFVVXNRMEZCUXp0WlFVTmtMRXRCUVVzc1VVRkJVU3hEUVVGRExFbEJRVWs3WjBKQlEyaENMRTFCUVUwc1IwRkJSeXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETzJkQ1FVTnlRaXhOUVVGTk8xbEJRMUlzUzBGQlN5eFJRVUZSTEVOQlFVTXNUMEZCVHl4RFFVRkRPMWxCUTNSQ0xFdEJRVXNzVVVGQlVTeERRVUZETEV0QlFVczdaMEpCUTJwQ0xFMUJRVTBzUjBGQlJ5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRPMmRDUVVOMlFpeE5RVUZOTzFsQlExSXNTMEZCU3l4UlFVRlJMRU5CUVVNc1MwRkJTenRuUWtGRGFrSXNUVUZCVFN4SFFVRkhMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU03WjBKQlEzWkNMRTFCUVUwN1dVRkRVanRuUWtGRFJTeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRzFDUVVGdFFpeERRVUZETEVOQlFVTTdVVUZEZWtNc1EwRkJRenRSUVVORUxFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hIUVVGSExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTTFReXhEUVVGRE8wbEJSVVE3T3pzN096dFBRVTFITzBsQlEwZ3NTMEZCU3l4RFFVRkRMRWRCUVdVc1JVRkJSU3haUVVGdlFpeERRVUZETzFGQlF6RkRMRWxCUVVzc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFRRVUZUTEVOQlFWa3NTVUZCU1N4VFFVRlRPMWxCUTJwRUxFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNVVUZCVVN4RFFVRkRMRTlCUVU4c1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU53UXl4RFFVRkRPMGxCUlVRN096czdPenRQUVUxSE8wbEJRMGdzVDBGQlR5eERRVUZETEVkQlFXVXNSVUZCUlN4WlFVRnZRaXhEUVVGRE8xRkJRelZETEVsQlFVc3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhUUVVGVExFTkJRVmtzU1VGQlNTeFRRVUZUTzFsQlEycEVMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVVVGQlVTeERRVUZETEU5QlFVOHNSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVOd1F5eERRVUZETzBsQlJVUTdPenM3TzA5QlMwYzdTVUZEU0N4SlFVRkpMRU5CUVVNc1IwRkJaVHRSUVVOc1FpeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZETDBJc1EwRkJRenRKUVVWRU96czdPenRQUVV0SE8wbEJRMGdzUzBGQlN5eERRVUZETEVkQlFXVTdVVUZEYmtJc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRMmhETEVOQlFVTTdTVUZGUkRzN096czdUMEZMUnp0SlFVTklMRXRCUVVzc1EwRkJReXhIUVVGMVFqdFJRVU16UWl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRhRU1zUTBGQlF6dEpRVVZFTEZOQlFWTXNRMEZCUXl4TlFVRTRRanRSUVVOMFF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVsQlFVa3NSVUZCUlN4RFFVRkRMRVZCUVVVc1IwRkJSeXhOUVVGTkxFVkJRVVVzUTBGQlF6dEpRVU5zUkN4RFFVRkRPME5CUTBZN1FVRkZSRHM3T3pzN096dEhRVTlITzBGQlEwZ3NUVUZCVFN4UFFVRlBMRTlCUVU4N1NVRlBiRUk3T3p0UFFVZEhPMkZCUTFrc1lVRkJVU3hIUVVGclFpeERRVU4yUXl4TlFVRmpMRVZCUTJRc1RVRkJLMElzUlVGREwwSXNSVUZCUlR0UlFVTkdMRTlCUVU4c1NVRkJTU3hWUVVGVkxFTkJRVU1zVFVGQlRTeEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRPMGxCUTNoRExFTkJRVU1zUTBGQlF6dEpRVU5HT3pzN1QwRkhSenRoUVVOWkxGbEJRVThzUjBGQmEwSXNiMEpCUVc5Q0xFTkJRVU03U1VGRk4wUTdPenRQUVVkSE8wbEJRMGdzWjBKQlFYVkNMRU5CUVVNN1NVRkZlRUlzVFVGQlRTeERRVUZETEZWQlFWVXNRMEZCUXl4UFFVRnpRanRSUVVOMFF5eFBRVUZQTEVOQlFVTXNVVUZCVVN4SFFVRkhMRTlCUVU4c1EwRkJRenRKUVVNM1FpeERRVUZETzBsQlJVUTdPenM3TzA5QlMwYzdTVUZEU0N4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExFMUJRVGhDTzFGQlF6ZERMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJRenRKUVVOMFF5eERRVUZETzBsQlJVUXNUVUZCVFN4RFFVRkRMRk5CUVZNN1VVRkRaQ3hQUVVGUExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlN4RlFVRkZMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dEpRVU42UXl4RFFVRkRPMGxCUlVRN096czdPMDlCUzBjN1NVRkRTQ3hOUVVGTkxFTkJRVU1zUjBGQlJ6dFJRVU5TTEVsQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJRenRSUVVOdVJTeFBRVUZQTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNN1NVRkRja0lzUTBGQlF6dEpRVVZFT3pzN096czdUMEZOUnp0SlFVTklMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlpTeEZRVUZGTEZsQlFXOUNMRU5CUVVNN1VVRkRia1FzVDBGQlR5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExFZEJRVWNzUlVGQlJTeFRRVUZUTEVOQlFVTXNRMEZCUXp0SlFVTTFReXhEUVVGRE8wbEJSVVE3T3pzN08wOUJTMGM3U1VGRFNDeE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVdVN1VVRkRla0lzVDBGQlR5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBsQlF6bENMRU5CUVVNN1NVRkZSRHM3T3pzN1QwRkxSenRKUVVOSUxFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCWlR0UlFVTXhRaXhQUVVGUExFbEJRVWtzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGREwwSXNRMEZCUXp0SlFVVkVPenM3T3p0UFFVdEhPMGxCUTBnc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZsTzFGQlF6RkNMRTlCUVU4c1NVRkJTU3hEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVNdlFpeERRVUZETzBsQlJVUTdPenM3TzA5QlMwYzdTVUZEU0N4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRV1U3VVVGRE1VSXNUMEZCVHl4SlFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUXk5Q0xFTkJRVU03U1VGRlJDeE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVTlNMRTFCUVhOQ0xFVkJRM1JDTEUxQlFTdENMRVZCUXk5Q0xFZEJRVWNzU1VGQlZ6dFJRVVZrTEUxQlFVMDdXVUZEU2l4UFFVRlBMRTFCUVUwc1MwRkJTeXhSUVVGUk8yZENRVU40UWl4RFFVRkRMRU5CUVVNc1RVRkJUVHRuUWtGRFVpeERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRmRCUVZjN2IwSkJRMnhDTEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWs3YjBKQlEzcENMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETzFGQlEzQkNMRTlCUVU4c1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eE5RVUZOTEVWQlFVVXNUVUZCVFN4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRGFFUXNRMEZCUXp0SlFVVkVPenM3T3pzN096czdUMEZUUnp0SlFVTklMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQll5eEZRVUZGTEVWQlFWYzdVVUZEZUVNc1QwRkJUeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEUxQlFVMHNSVUZCUlN4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETzBsQlEycEVMRU5CUVVNN1NVRkZSQ3hOUVVGTkxFTkJRVU1zUzBGQlN5eERRVU5XTEVsQlFWa3NSVUZEV2l4SlFVRnJReXhGUVVOc1F5eFhRVUZ4UWl4RlFVTnlRaXhYUVVGclFpeFpRVUZaTzFGQlJUbENMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVczdXVUZCUlN4UFFVRlBMRWxCUVVrc1EwRkJRenRSUVVOeVF5eE5RVUZOTEUxQlFVMHNSMEZCUnl4UFFVRlBMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVVM1F5eFRRVUZUTEV0QlFVc3NRMEZEV2l4SFFVRlhMRVZCUTFnc1RVRkJlVUlzUlVGRGVrSXNTMEZCZVVVN1dVRkZla1VzU1VGQlNTeERRVUZETzJkQ1FVTklMRTFCUVUwc1EwRkJReXhIUVVFd1FpeEhRVUZITEVOQlFVTTdaMEpCUTNKRExFbEJRVWtzUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRmFrSXNVMEZCVXl4VlFVRlZMRU5CUTJwQ0xFZEJRV2xFTEVWQlEycEVMRWxCUVVrc1IwRkJSeXhMUVVGTE8yOUNRVVZhTEVsQlFVa3NRMEZCUXl4SFFVbHRRaXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFZRVUZWTEVOQlFVTTdiMEpCUXpORUxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU03ZDBKQlEzaENMRTlCUVZFc1EwRkJLME1zUTBGQlF5eEpRVUZKTEVOQlF6RkVMRU5CUVVNc1JVRkRSQ3hMUVVGbExFTkJRMmhDTEVOQlFVTTdiMEpCUTBvc1EwRkJRenR2UWtGRFJDeFJRVUZSTEVkQlFVY3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenQzUWtGRGJrSXNTMEZCU3l4RFFVRkRPelJDUVVOS0xFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4UlFVRlJMRU5CUVVNN05FSkJRM0pETEU5QlFWRXNRMEZCTmtNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0M1FrRkRhRVVzUzBGQlN5eERRVUZET3pSQ1FVTktMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTTdORUpCUXpOQ0xFOUJRVThzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzNkQ1FVTjJRenMwUWtGRFJTeE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRFpDUVVFMlFpeE5RVUZOTEVWQlFVVXNRMEZCUXl4RFFVRkRPelJDUVVOd1JDeFBRVUZQTEV0QlFVc3NRMEZCUXl4RFFVRlhMRU5CUVVNc1EwRkJRenR2UWtGRE9VSXNRMEZCUXp0blFrRkRTQ3hEUVVGRE8yZENRVVZFTEZOQlFWTXNWVUZCVlN4RFFVRkRMRU5CUVd0Q08yOUNRVU53UXl4SlFVRkpMRTlCUVU4c1EwRkJReXhMUVVGTExGRkJRVkVzUlVGQlJTeERRVUZETzNkQ1FVTXhRaXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenR2UWtGRGFrSXNRMEZCUXp0NVFrRkJUU3hEUVVGRE8zZENRVU5PTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJNRUlzUTBGQmFVSXNRMEZCUXp0dlFrRkRjRVFzUTBGQlF6dG5Ra0ZEU0N4RFFVRkRPMmRDUVVWRUxGRkJRVkVzVFVGQlRTeEZRVUZGTEVOQlFVTTdiMEpCUTJZc1MwRkJTeXhKUVVGSkxFTkJRVU03YjBKQlExWXNTMEZCU3l4SlFVRkpPM2RDUVVOUUxFOUJRVThzVlVGQlZTeERRVUZETEV0QlFXVXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenR2UWtGRE1VTXNTMEZCU3l4UFFVRlBPM2RDUVVOV0xFbEJRVWtzUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSU3hEUVVGRE96UkNRVU42UWl4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzNkQ1FVTTFRaXhEUVVGRE96WkNRVUZOTEVOQlFVTTdORUpCUTA0c1ZVRkJWU3hEUVVGRExFdEJRWGRDTEVOQlFVTXNRMEZCUXp0M1FrRkRka01zUTBGQlF6dDNRa0ZEUkN4UFFVRlBMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU03YjBKQlEyaENPM2RDUVVORkxFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNOa0pCUVRaQ0xFMUJRVTBzUlVGQlJTeERRVUZETEVOQlFVTTdkMEpCUTNCRUxFOUJRVThzUTBGQlF5eERRVUZETzJkQ1FVTmlMRU5CUVVNN1owSkJRMFFzTmtSQlFUWkVPMWxCUXk5RUxFTkJRVU03V1VGQlF5eFBRVUZQTEVOQlFWVXNSVUZCUlN4RFFVRkRPMmRDUVVOd1FpeE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMSGxDUVVGNVFpeE5RVUZOTEdWQlFXVXNTMEZCU3l4RlFVRkZMRU5CUVVNc1EwRkJRenRuUWtGRGNFVXNUMEZCVHl4SFFVRkhMRU5CUVVNN1dVRkRZaXhEUVVGRE8xRkJRMGdzUTBGQlF6dFJRVVZFTEUxQlFVMHNaVUZCWlN4SFFVRkhMRkZCUVZFc1EwRkJReXhKUVVGdFFpeERRVUZETEVOQlFVTTdVVUZEZEVRc1NVRkJTU3hEUVVGRExHVkJRV1VzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdXVUZETjBRc1QwRkJUeXhKUVVGSkxFTkJRVU03VVVGRFpDeERRVUZETzFGQlJVUXNTVUZCU1N4WFFVRlhMRWRCUVdkQ0xHVkJRVGhDTEVOQlFVTTdVVUZGT1VRc1RVRkJUU3hUUVVGVExFZEJRVWNzVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkZMRVZCUVVVc1VVRkJVU3hEUVVGRExFTkJRVU03VVVGRE9VTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExHVkJRV1VzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRk5CUVZNN1dVRkRPVU1zVjBGQlZ6dG5Ra0ZEVWl4bFFVRjVReXhEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXp0UlFVVnNSU3hQUVVGUExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUjBGQlZ5eEZRVUZGTEVkQlFWY3NSVUZCUlN4RlFVRkZPMWxCUTJ4RkxFMUJRVTBzUjBGQlJ5eEhRVUZKTEZkQlFUSkNMRU5CUVVNc1IwRkJkMElzUTBGQlF5eERRVUZETzFsQlEyNUZMRWxCUVVrc1IwRkJSenRuUWtGRFRDeFBRVUZQTEV0QlFVc3NRMEZEVml4SFFVRkhMRVZCUTBnc1IwRkJkMElzUlVGRGVFSXNSMEZMV1N4RFFVTmlMRU5CUVVNN1dVRkRTaXhQUVVGUExFZEJRVWNzUTBGQlF6dFJRVU5pTEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVOWUxFTkJRVU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnZTF4dUlDQk1iMmRuWlhKR1lXTjBiM0o1TEZ4dUlDQk1iMmRuYVc1blEyOXVabWxuTEZ4dUlDQk1iMmRuYVc1blEyOXVkR1Y0ZEN4Y2JpQWdVM1J5YVc1blRHbHJaU3hjYmlBZ1ZHaGxiV1VzWEc0Z0lGUm9aVzFsVDNCMGFXOXVMRnh1SUNCVWFHVnRaVTl3ZEdsdmJrSjVURzluVEdWMlpXd3NYRzRnSUV4dloyZGxjaXhjYm4wZ1puSnZiU0JjSWk0dmRIbHdaWE5jSWp0Y2JtbHRjRzl5ZENCN0lFTnZiRzl5YVhwbFQzQjBhVzl1Y3l3Z2MzUjViR1VzSUZOMGVXeGxaRk4wY21sdVp5QjlJR1p5YjIwZ1hDSnpkSGxzWldRdGMzUnlhVzVuTFdKMWFXeGtaWEpjSWp0Y2JtbHRjRzl5ZENCN1hHNGdJRVJsWm1GMWJIUk1iMmRuYVc1blEyOXVabWxuTEZ4dUlDQkVaV1poZFd4MFZHaGxiV1VzWEc0Z0lFeHZaMHhsZG1Wc0xGeHVJQ0JPZFcxbGNtbGpURzluVEdWMlpXeHpMRnh1ZlNCbWNtOXRJRndpTGk5amIyNXpkR0Z1ZEhOY0lqdGNibHh1THlvcVhHNGdLaUJBWkdWelkzSnBjSFJwYjI0Z1FTQnRhVzVwYldGc0lHeHZaMmRsY2lCcGJYQnNaVzFsYm5SaGRHbHZiaTVjYmlBcUlFQnpkVzF0WVhKNUlFMXBibWxNYjJkblpYSWdhWE1nWVNCc2FXZG9kSGRsYVdkb2RDQnNiMmRuYVc1bklHTnNZWE56SUhSb1lYUWdhVzF3YkdWdFpXNTBjeUIwYUdVZ1ZtVnlZbTl6YVhSNVRHOW5aMlZ5SUdsdWRHVnlabUZqWlM1Y2JpQXFJRWwwSUhCeWIzWnBaR1Z6SUdKaGMybGpJR3h2WjJkcGJtY2dablZ1WTNScGIyNWhiR2wwZVNCM2FYUm9JSE4xY0hCdmNuUWdabTl5SUdScFptWmxjbVZ1ZENCc2IyY2diR1YyWld4eklHRnVaQ0IyWlhKaWIzTnBkSGt1WEc0Z0tseHVJQ29nUUdOc1lYTnpYRzRnS2k5Y2JtVjRjRzl5ZENCamJHRnpjeUJOYVc1cFRHOW5aMlZ5SUdsdGNHeGxiV1Z1ZEhNZ1RHOW5aMlZ5SUh0Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCRGNtVmhkR1Z6SUdFZ2JtVjNJRTFwYm1sTWIyZG5aWElnYVc1emRHRnVZMlV1WEc0Z0lDQXFJRUJ6ZFcxdFlYSjVJRWx1YVhScFlXeHBlbVZ6SUdFZ1RXbHVhVXh2WjJkbGNpQjNhWFJvSUhSb1pTQm5hWFpsYmlCamJHRnpjeUJ1WVcxbExDQnZjSFJwYjI1aGJDQmpiMjVtYVdkMWNtRjBhVzl1TENCaGJtUWdiV1YwYUc5a0lHNWhiV1V1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCamIyNTBaWGgwSUMwZ1ZHaGxJRzVoYldVZ2IyWWdkR2hsSUdOc1lYTnpJSFZ6YVc1bklIUm9hWE1nYkc5bloyVnlMbHh1SUNBZ0tpQkFjR0Z5WVcwZ1cyTnZibVpkSUMwZ1QzQjBhVzl1WVd3Z2JHOW5aMmx1WnlCamIyNW1hV2QxY21GMGFXOXVMaUJFWldaaGRXeDBjeUIwYnlCSmJtWnZJR3hsZG1Wc0lHRnVaQ0IyWlhKaWIzTnBkSGtnTUM1Y2JpQWdJQ29nUUhCaGNtRnRJRnRwWkYwZ0xTQlBjSFJwYjI1aGJDQjFibWx4ZFdVZ2FXUmxiblJwWm1sbGNpQm1iM0lnZEdobElHeHZaMmRsY2lCcGJuTjBZVzVqWlM1Y2JpQWdJQ292WEc0Z0lHTnZibk4wY25WamRHOXlLRnh1SUNBZ0lIQnliM1JsWTNSbFpDQmpiMjUwWlhoME9pQnpkSEpwYm1jc1hHNGdJQ0FnY0hKdmRHVmpkR1ZrSUdOdmJtWS9PaUJRWVhKMGFXRnNQRXh2WjJkcGJtZERiMjVtYVdjK1hHNGdJQ2tnZTMxY2JseHVJQ0J3Y205MFpXTjBaV1FnWTI5dVptbG5LRnh1SUNBZ0lHdGxlVG9nYTJWNWIyWWdURzluWjJsdVowTnZibVpwWjF4dUlDQXBPaUJNYjJkbmFXNW5RMjl1Wm1sblcydGxlVzltSUV4dloyZHBibWREYjI1bWFXZGRJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NWpiMjVtSUNZbUlHdGxlU0JwYmlCMGFHbHpMbU52Ym1ZcElISmxkSFZ5YmlCMGFHbHpMbU52Ym1aYmEyVjVYVHRjYmlBZ0lDQnlaWFIxY200Z1RHOW5aMmx1Wnk1blpYUkRiMjVtYVdjb0tWdHJaWGxkTzF4dUlDQjlYRzVjYmlBZ1ptOXlLRnh1SUNBZ0lHMWxkR2h2WkQ4NklITjBjbWx1WnlCOElDZ29MaTR1WVhKbmN6b2dZVzU1VzEwcElEMCtJR0Z1ZVNrc1hHNGdJQ0FnWTI5dVptbG5Qem9nVUdGeWRHbGhiRHhNYjJkbmFXNW5RMjl1Wm1sblBpeGNiaUFnSUNBdUxpNWhjbWR6T2lCaGJubGJYVnh1SUNBcE9pQk1iMmRuWlhJZ2UxeHVJQ0FnSUcxbGRHaHZaQ0E5SUcxbGRHaHZaRnh1SUNBZ0lDQWdQeUIwZVhCbGIyWWdiV1YwYUc5a0lEMDlQU0JjSW5OMGNtbHVaMXdpWEc0Z0lDQWdJQ0FnSUQ4Z2JXVjBhRzlrWEc0Z0lDQWdJQ0FnSURvZ2JXVjBhRzlrTG01aGJXVmNiaUFnSUNBZ0lEb2dkVzVrWldacGJtVmtPMXh1WEc0Z0lDQWdjbVYwZFhKdUlFeHZaMmRwYm1jdVptOXlLRnQwYUdsekxtTnZiblJsZUhRc0lHMWxkR2h2WkYwdWFtOXBiaWhjSWk1Y0lpa3NJR052Ym1acFp5d2dMaTR1WVhKbmN5azdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlFTnlaV0YwWlhNZ1lTQm1iM0p0WVhSMFpXUWdiRzluSUhOMGNtbHVaeTVjYmlBZ0lDb2dRSE4xYlcxaGNua2dSMlZ1WlhKaGRHVnpJR0VnYkc5bklITjBjbWx1WnlCM2FYUm9JSFJwYldWemRHRnRjQ3dnWTI5c2IzSmxaQ0JzYjJjZ2JHVjJaV3dzSUdGdVpDQnRaWE56WVdkbExseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdiR1YyWld3Z0xTQlVhR1VnYkc5bklHeGxkbVZzSUdGeklHRWdjM1J5YVc1bkxseHVJQ0FnS2lCQWNHRnlZVzBnYldWemMyRm5aVnh1SUNBZ0tpQkFjR0Z5WVcwZ2MzUmhZMnRjYmlBZ0lDb2dRSEpsZEhWeWJpQkJJR1p2Y20xaGRIUmxaQ0JzYjJjZ2MzUnlhVzVuTGx4dUlDQWdLaTljYmlBZ2NISnZkR1ZqZEdWa0lHTnlaV0YwWlV4dlp5aGNiaUFnSUNCc1pYWmxiRG9nVEc5blRHVjJaV3dzWEc0Z0lDQWdiV1Z6YzJGblpUb2dVM1J5YVc1blRHbHJaU0I4SUVWeWNtOXlMRnh1SUNBZ0lITjBZV05yUHpvZ2MzUnlhVzVuWEc0Z0lDazZJSE4wY21sdVp5QjdYRzRnSUNBZ1kyOXVjM1FnYkc5bk9pQnpkSEpwYm1kYlhTQTlJRnRkTzF4dUlDQWdJR052Ym5OMElITjBlV3hsSUQwZ2RHaHBjeTVqYjI1bWFXY29YQ0p6ZEhsc1pWd2lLVHRjYmlBZ0lDQnBaaUFvZEdocGN5NWpiMjVtYVdjb1hDSjBhVzFsYzNSaGJYQmNJaWtwSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJR1JoZEdVZ1BTQnVaWGNnUkdGMFpTZ3BMblJ2U1ZOUFUzUnlhVzVuS0NrN1hHNGdJQ0FnSUNCamIyNXpkQ0IwYVcxbGMzUmhiWEFnUFNCemRIbHNaU0EvSUV4dloyZHBibWN1ZEdobGJXVW9aR0YwWlN3Z1hDSjBhVzFsYzNSaGJYQmNJaXdnYkdWMlpXd3BJRG9nWkdGMFpUdGNiaUFnSUNBZ0lHeHZaeTV3ZFhOb0tIUnBiV1Z6ZEdGdGNDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLSFJvYVhNdVkyOXVabWxuS0Z3aWJHOW5UR1YyWld4Y0lpa3BJSHRjYmlBZ0lDQWdJR052Ym5OMElHeDJiRG9nYzNSeWFXNW5JRDBnYzNSNWJHVmNiaUFnSUNBZ0lDQWdQeUJNYjJkbmFXNW5MblJvWlcxbEtHeGxkbVZzTENCY0lteHZaMHhsZG1Wc1hDSXNJR3hsZG1Wc0tWeHVJQ0FnSUNBZ0lDQTZJR3hsZG1Wc08xeHVJQ0FnSUNBZ2JHOW5MbkIxYzJnb2JIWnNLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvZEdocGN5NWpiMjVtYVdjb1hDSmpiMjUwWlhoMFhDSXBLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQmpiMjUwWlhoME9pQnpkSEpwYm1jZ1BTQnpkSGxzWlZ4dUlDQWdJQ0FnSUNBL0lFeHZaMmRwYm1jdWRHaGxiV1VvZEdocGN5NWpiMjUwWlhoMExDQmNJbU5zWVhOelhDSXNJR3hsZG1Wc0tWeHVJQ0FnSUNBZ0lDQTZJSFJvYVhNdVkyOXVkR1Y0ZER0Y2JpQWdJQ0FnSUd4dlp5NXdkWE5vS0dOdmJuUmxlSFFwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNoMGFHbHpMbU52Ym1acFp5aGNJbU52Y25KbGJHRjBhVzl1U1dSY0lpa3BJSHRjYmlBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdhV1E2SUhOMGNtbHVaeUE5SUhOMGVXeGxYRzRnSUNBZ0lDQWdJQ0FnUHlCTWIyZG5hVzVuTG5Sb1pXMWxLSFJvYVhNdVkyOXVabWxuS0Z3aVkyOXljbVZzWVhScGIyNUpaRndpS1NFdWRHOVRkSEpwYm1jb0tTd2dYQ0pwWkZ3aUxDQnNaWFpsYkNsY2JpQWdJQ0FnSUNBZ0lDQTZJSFJvYVhNdVkyOXVabWxuS0Z3aVkyOXljbVZzWVhScGIyNUpaRndpS1NFdWRHOVRkSEpwYm1jb0tUdGNiaUFnSUNBZ0lDQWdiRzluTG5CMWMyZ29hV1FwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJR052Ym5OMElHMXpaem9nYzNSeWFXNW5JRDBnYzNSNWJHVmNiaUFnSUNBZ0lEOGdURzluWjJsdVp5NTBhR1Z0WlNoY2JpQWdJQ0FnSUNBZ0lDQjBlWEJsYjJZZ2JXVnpjMkZuWlNBOVBUMGdYQ0p6ZEhKcGJtZGNJaUEvSUcxbGMzTmhaMlVnT2lBb2JXVnpjMkZuWlNCaGN5QkZjbkp2Y2lrdWJXVnpjMkZuWlN4Y2JpQWdJQ0FnSUNBZ0lDQmNJbTFsYzNOaFoyVmNJaXhjYmlBZ0lDQWdJQ0FnSUNCc1pYWmxiRnh1SUNBZ0lDQWdJQ0FwWEc0Z0lDQWdJQ0E2SUhSNWNHVnZaaUJ0WlhOellXZGxJRDA5UFNCY0luTjBjbWx1WjF3aVhHNGdJQ0FnSUNBZ0lEOGdiV1Z6YzJGblpWeHVJQ0FnSUNBZ0lDQTZJQ2h0WlhOellXZGxJR0Z6SUVWeWNtOXlLUzV0WlhOellXZGxPMXh1SUNBZ0lHeHZaeTV3ZFhOb0tHMXpaeWs3WEc0Z0lDQWdhV1lnS0hOMFlXTnJJSHg4SUcxbGMzTmhaMlVnYVc1emRHRnVZMlZ2WmlCRmNuSnZjaWtnZTF4dUlDQWdJQ0FnYzNSaFkyc2dQU0J6ZEhsc1pWeHVJQ0FnSUNBZ0lDQS9JRXh2WjJkcGJtY3VkR2hsYldVb1hHNGdJQ0FnSUNBZ0lDQWdJQ0FvYzNSaFkyc2dmSHdnS0cxbGMzTmhaMlVnWVhNZ1JYSnliM0lwTG5OMFlXTnJLU0JoY3lCemRISnBibWNzWEc0Z0lDQWdJQ0FnSUNBZ0lDQmNJbk4wWVdOclhDSXNYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYWmxiRnh1SUNBZ0lDQWdJQ0FnSUNsY2JpQWdJQ0FnSUNBZ09pQnpkR0ZqYXp0Y2JpQWdJQ0FnSUd4dlp5NXdkWE5vS0dCY1hHNVRkR0ZqYXlCMGNtRmpaVHBjWEc0a2UzTjBZV05yZldBcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhKbGRIVnliaUJzYjJjdWFtOXBiaWgwYUdsekxtTnZibVpwWnloY0luTmxjR0Z5WVhSdmNsd2lLU0JoY3lCemRISnBibWNwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJNYjJkeklHRWdiV1Z6YzJGblpTQjNhWFJvSUhSb1pTQnpjR1ZqYVdacFpXUWdiRzluSUd4bGRtVnNMbHh1SUNBZ0tpQkFjM1Z0YldGeWVTQkRhR1ZqYTNNZ2FXWWdkR2hsSUcxbGMzTmhaMlVnYzJodmRXeGtJR0psSUd4dloyZGxaQ0JpWVhObFpDQnZiaUIwYUdVZ1kzVnljbVZ1ZENCc2IyY2diR1YyWld3c1hHNGdJQ0FxSUhSb1pXNGdkWE5sY3lCMGFHVWdZWEJ3Y205d2NtbGhkR1VnWTI5dWMyOXNaU0J0WlhSb2IyUWdkRzhnYjNWMGNIVjBJSFJvWlNCc2IyY3VYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0JzWlhabGJDQXRJRlJvWlNCc2IyY2diR1YyWld3Z2IyWWdkR2hsSUcxbGMzTmhaMlV1WEc0Z0lDQXFJRUJ3WVhKaGJTQnRjMmNnTFNCVWFHVWdiV1Z6YzJGblpTQjBieUJpWlNCc2IyZG5aV1F1WEc0Z0lDQXFJRUJ3WVhKaGJTQnpkR0ZqYTF4dUlDQWdLaTljYmlBZ2NISnZkR1ZqZEdWa0lHeHZaeWhjYmlBZ0lDQnNaWFpsYkRvZ1RHOW5UR1YyWld3c1hHNGdJQ0FnYlhObk9pQlRkSEpwYm1kTWFXdGxJSHdnUlhKeWIzSXNYRzRnSUNBZ2MzUmhZMnMvT2lCemRISnBibWRjYmlBZ0tUb2dkbTlwWkNCN1hHNGdJQ0FnYVdZZ0tGeHVJQ0FnSUNBZ1RuVnRaWEpwWTB4dloweGxkbVZzYzF0MGFHbHpMbU52Ym1acFp5aGNJbXhsZG1Wc1hDSXBJR0Z6SUV4dloweGxkbVZzWFNBOFhHNGdJQ0FnSUNCT2RXMWxjbWxqVEc5blRHVjJaV3h6VzJ4bGRtVnNYVnh1SUNBZ0lDbGNiaUFnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0JzWlhRZ2JXVjBhRzlrTzF4dUlDQWdJSE4zYVhSamFDQW9iR1YyWld3cElIdGNiaUFnSUNBZ0lHTmhjMlVnVEc5blRHVjJaV3d1YVc1bWJ6cGNiaUFnSUNBZ0lDQWdiV1YwYUc5a0lEMGdZMjl1YzI5c1pTNXNiMmM3WEc0Z0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdZMkZ6WlNCTWIyZE1aWFpsYkM1MlpYSmliM05sT2x4dUlDQWdJQ0FnWTJGelpTQk1iMmRNWlhabGJDNWtaV0oxWnpwY2JpQWdJQ0FnSUNBZ2JXVjBhRzlrSUQwZ1kyOXVjMjlzWlM1a1pXSjFaenRjYmlBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQmpZWE5sSUV4dloweGxkbVZzTG1WeWNtOXlPbHh1SUNBZ0lDQWdJQ0J0WlhSb2IyUWdQU0JqYjI1emIyeGxMbVZ5Y205eU8xeHVJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhjSWtsdWRtRnNhV1FnYkc5bklHeGxkbVZzWENJcE8xeHVJQ0FnSUgxY2JpQWdJQ0J0WlhSb2IyUW9kR2hwY3k1amNtVmhkR1ZNYjJjb2JHVjJaV3dzSUcxelp5d2djM1JoWTJzcEtUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1RFeHZaM01nWVNCZ2QyRjVJSFJ2YnlCMlpYSmliM05sWUNCdmNpQmhJSE5wYkd4NUlHMWxjM05oWjJVdVhHNGdJQ0FxSUVCemRXMXRZWEo1SUV4dlozTWdZU0J0WlhOellXZGxJR0YwSUhSb1pTQlRhV3hzZVNCc1pYWmxiQ0JwWmlCMGFHVWdZM1Z5Y21WdWRDQjJaWEppYjNOcGRIa2dZV3hzYjNkeklHbDBMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnYlhObklDMGdWR2hsSUcxbGMzTmhaMlVnZEc4Z1ltVWdiRzluWjJWa0xseHVJQ0FnS2lCQWNHRnlZVzBnZG1WeVltOXphWFI1SUMwZ1ZHaGxJSFpsY21KdmMybDBlU0JzWlhabGJDQnZaaUIwYUdVZ2JXVnpjMkZuWlNBb1pHVm1ZWFZzZERvZ01Da3VYRzRnSUNBcUwxeHVJQ0J6YVd4c2VTaHRjMmM2SUZOMGNtbHVaMHhwYTJVc0lIWmxjbUp2YzJsMGVUb2diblZ0WW1WeUlEMGdNQ2s2SUhadmFXUWdlMXh1SUNBZ0lHbG1JQ2dvZEdocGN5NWpiMjVtYVdjb1hDSjJaWEppYjNObFhDSXBJR0Z6SUc1MWJXSmxjaWtnUGowZ2RtVnlZbTl6YVhSNUtWeHVJQ0FnSUNBZ2RHaHBjeTVzYjJjb1RHOW5UR1YyWld3dWRtVnlZbTl6WlN3Z2JYTm5LVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdURzluY3lCaElIWmxjbUp2YzJVZ2JXVnpjMkZuWlM1Y2JpQWdJQ29nUUhOMWJXMWhjbmtnVEc5bmN5QmhJRzFsYzNOaFoyVWdZWFFnZEdobElGWmxjbUp2YzJVZ2JHVjJaV3dnYVdZZ2RHaGxJR04xY25KbGJuUWdkbVZ5WW05emFYUjVJR0ZzYkc5M2N5QnBkQzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUcxelp5QXRJRlJvWlNCdFpYTnpZV2RsSUhSdklHSmxJR3h2WjJkbFpDNWNiaUFnSUNvZ1FIQmhjbUZ0SUhabGNtSnZjMmwwZVNBdElGUm9aU0IyWlhKaWIzTnBkSGtnYkdWMlpXd2diMllnZEdobElHMWxjM05oWjJVZ0tHUmxabUYxYkhRNklEQXBMbHh1SUNBZ0tpOWNiaUFnZG1WeVltOXpaU2h0YzJjNklGTjBjbWx1WjB4cGEyVXNJSFpsY21KdmMybDBlVG9nYm5WdFltVnlJRDBnTUNrNklIWnZhV1FnZTF4dUlDQWdJR2xtSUNnb2RHaHBjeTVqYjI1bWFXY29YQ0oyWlhKaWIzTmxYQ0lwSUdGeklHNTFiV0psY2lrZ1BqMGdkbVZ5WW05emFYUjVLVnh1SUNBZ0lDQWdkR2hwY3k1c2IyY29URzluVEdWMlpXd3VkbVZ5WW05elpTd2diWE5uS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnVEc5bmN5QmhiaUJwYm1adklHMWxjM05oWjJVdVhHNGdJQ0FxSUVCemRXMXRZWEo1SUV4dlozTWdZU0J0WlhOellXZGxJR0YwSUhSb1pTQkpibVp2SUd4bGRtVnNMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnYlhObklDMGdWR2hsSUcxbGMzTmhaMlVnZEc4Z1ltVWdiRzluWjJWa0xseHVJQ0FnS2k5Y2JpQWdhVzVtYnlodGMyYzZJRk4wY21sdVoweHBhMlVwT2lCMmIybGtJSHRjYmlBZ0lDQjBhR2x6TG14dlp5aE1iMmRNWlhabGJDNXBibVp2TENCdGMyY3BPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQk1iMmR6SUdFZ1pHVmlkV2NnYldWemMyRm5aUzVjYmlBZ0lDb2dRSE4xYlcxaGNua2dURzluY3lCaElHMWxjM05oWjJVZ1lYUWdkR2hsSUVSbFluVm5JR3hsZG1Wc0xseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdiWE5uSUMwZ1ZHaGxJRzFsYzNOaFoyVWdkRzhnWW1VZ2JHOW5aMlZrTGx4dUlDQWdLaTljYmlBZ1pHVmlkV2NvYlhObk9pQlRkSEpwYm1kTWFXdGxLVG9nZG05cFpDQjdYRzRnSUNBZ2RHaHBjeTVzYjJjb1RHOW5UR1YyWld3dVpHVmlkV2NzSUcxelp5azdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlFeHZaM01nWVc0Z1pYSnliM0lnYldWemMyRm5aUzVjYmlBZ0lDb2dRSE4xYlcxaGNua2dURzluY3lCaElHMWxjM05oWjJVZ1lYUWdkR2hsSUVWeWNtOXlJR3hsZG1Wc0xseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdiWE5uSUMwZ1ZHaGxJRzFsYzNOaFoyVWdkRzhnWW1VZ2JHOW5aMlZrTGx4dUlDQWdLaTljYmlBZ1pYSnliM0lvYlhObk9pQlRkSEpwYm1kTWFXdGxJSHdnUlhKeWIzSXBPaUIyYjJsa0lIdGNiaUFnSUNCMGFHbHpMbXh2WnloTWIyZE1aWFpsYkM1bGNuSnZjaXdnYlhObktUdGNiaUFnZlZ4dVhHNGdJSE5sZEVOdmJtWnBaeWhqYjI1bWFXYzZJRkJoY25ScFlXdzhURzluWjJsdVowTnZibVpwWno0cElIdGNiaUFnSUNCMGFHbHpMbU52Ym1ZZ1BTQjdJQzR1TGloMGFHbHpMbU52Ym1ZZ2ZId2dlMzBwTENBdUxpNWpiMjVtYVdjZ2ZUdGNiaUFnZlZ4dWZWeHVYRzR2S2lwY2JpQXFJRUJrWlhOamNtbHdkR2x2YmlCQklITjBZWFJwWXlCamJHRnpjeUJtYjNJZ2JXRnVZV2RwYm1jZ2JHOW5aMmx1WnlCdmNHVnlZWFJwYjI1ekxseHVJQ29nUUhOMWJXMWhjbmtnVkdobElFeHZaMmRwYm1jZ1kyeGhjM01nY0hKdmRtbGtaWE1nWVNCalpXNTBjbUZzYVhwbFpDQnNiMmRuYVc1bklHMWxZMmhoYm1semJTQjNhWFJvSUhOMWNIQnZjblFnWm05eVhHNGdLaUJrYVdabVpYSmxiblFnYkc5bklHeGxkbVZzY3lCaGJtUWdkbVZ5WW05emFYUjVMaUJKZENCMWMyVnpJR0VnYzJsdVoyeGxkRzl1SUhCaGRIUmxjbTRnZEc4Z2JXRnBiblJoYVc0Z1lTQm5iRzlpWVd4Y2JpQXFJR3h2WjJkbGNpQnBibk4wWVc1alpTQmhibVFnWVd4c2IzZHpJR055WldGMGFXNW5JSE53WldOcFptbGpJR3h2WjJkbGNuTWdabTl5SUdScFptWmxjbVZ1ZENCamJHRnpjMlZ6SUdGdVpDQnRaWFJvYjJSekxseHVJQ3BjYmlBcUlFQmpiR0Z6YzF4dUlDb3ZYRzVsZUhCdmNuUWdZMnhoYzNNZ1RHOW5aMmx1WnlCN1hHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1ZHaGxJR2RzYjJKaGJDQnNiMmRuWlhJZ2FXNXpkR0Z1WTJVdVhHNGdJQ0FxSUVCemRXMXRZWEo1SUVFZ2MybHVaMnhsZEc5dUlHbHVjM1JoYm1ObElHOW1JRlpsY21KdmMybDBlVXh2WjJkbGNpQjFjMlZrSUdadmNpQm5iRzlpWVd3Z2JHOW5aMmx1Wnk1Y2JpQWdJQ292WEc0Z0lIQnlhWFpoZEdVZ2MzUmhkR2xqSUdkc2IySmhiRDg2SUV4dloyZGxjanRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUVaaFkzUnZjbmtnWm5WdVkzUnBiMjRnWm05eUlHTnlaV0YwYVc1bklHeHZaMmRsY2lCcGJuTjBZVzVqWlhNdVhHNGdJQ0FxSUVCemRXMXRZWEo1SUVFZ1puVnVZM1JwYjI0Z2RHaGhkQ0JqY21WaGRHVnpJRzVsZHlCV1pYSmliM05wZEhsTWIyZG5aWElnYVc1emRHRnVZMlZ6TGlCQ2VTQmtaV1poZFd4MExDQnBkQ0JqY21WaGRHVnpJR0VnVFdsdWFVeHZaMmRsY2k1Y2JpQWdJQ292WEc0Z0lIQnlhWFpoZEdVZ2MzUmhkR2xqSUY5bVlXTjBiM0o1T2lCTWIyZG5aWEpHWVdOMGIzSjVJRDBnS0Z4dUlDQWdJRzlpYW1WamREb2djM1J5YVc1bkxGeHVJQ0FnSUdOdmJtWnBaejg2SUZCaGNuUnBZV3c4VEc5bloybHVaME52Ym1acFp6NWNiaUFnS1NBOVBpQjdYRzRnSUNBZ2NtVjBkWEp1SUc1bGR5Qk5hVzVwVEc5bloyVnlLRzlpYW1WamRDd2dZMjl1Wm1sbktUdGNiaUFnZlR0Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCRGIyNW1hV2QxY21GMGFXOXVJR1p2Y2lCMGFHVWdiRzluWjJsdVp5QnplWE4wWlcwdVhHNGdJQ0FxSUVCemRXMXRZWEo1SUZOMGIzSmxjeUIwYUdVZ1oyeHZZbUZzSUhabGNtSnZjMmwwZVNCc1pYWmxiQ0JoYm1RZ2JHOW5JR3hsZG1Wc0lITmxkSFJwYm1kekxseHVJQ0FnS2k5Y2JpQWdjSEpwZG1GMFpTQnpkR0YwYVdNZ1gyTnZibVpwWnpvZ1RHOW5aMmx1WjBOdmJtWnBaeUE5SUVSbFptRjFiSFJNYjJkbmFXNW5RMjl1Wm1sbk8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdVSEpwZG1GMFpTQmpiMjV6ZEhKMVkzUnZjaUIwYnlCd2NtVjJaVzUwSUdsdWMzUmhiblJwWVhScGIyNHVYRzRnSUNBcUlFQnpkVzF0WVhKNUlFVnVjM1Z5WlhNZ2RHaGhkQ0IwYUdVZ1RHOW5aMmx1WnlCamJHRnpjeUJqWVc1dWIzUWdZbVVnYVc1emRHRnVkR2xoZEdWa0lHRnpJR2wwSjNNZ1pHVnphV2R1WldRZ2RHOGdZbVVnZFhObFpDQnpkR0YwYVdOaGJHeDVMbHh1SUNBZ0tpOWNiaUFnY0hKcGRtRjBaU0JqYjI1emRISjFZM1J2Y2lncElIdDlYRzVjYmlBZ2MzUmhkR2xqSUhObGRFWmhZM1J2Y25rb1ptRmpkRzl5ZVRvZ1RHOW5aMlZ5Um1GamRHOXllU2tnZTF4dUlDQWdJRXh2WjJkcGJtY3VYMlpoWTNSdmNua2dQU0JtWVdOMGIzSjVPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQlRaWFIwWlhJZ1ptOXlJSFJvWlNCc2IyZG5hVzVuSUdOdmJtWnBaM1Z5WVhScGIyNHVYRzRnSUNBcUlFQnpkVzF0WVhKNUlFRnNiRzkzY3lCMWNHUmhkR2x1WnlCMGFHVWdaMnh2WW1Gc0lHeHZaMmRwYm1jZ1kyOXVabWxuZFhKaGRHbHZiaTVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUdOdmJtWnBaeUF0SUVGdUlHOWlhbVZqZENCamIyNTBZV2x1YVc1bklIWmxjbUp2YzJsMGVTQmhibVFnYkc5bklHeGxkbVZzSUhObGRIUnBibWR6TGx4dUlDQWdLaTljYmlBZ2MzUmhkR2xqSUhObGRFTnZibVpwWnloamIyNW1hV2M2SUZCaGNuUnBZV3c4VEc5bloybHVaME52Ym1acFp6NHBJSHRjYmlBZ0lDQlBZbXBsWTNRdVlYTnphV2R1S0hSb2FYTXVYMk52Ym1acFp5d2dZMjl1Wm1sbktUdGNiaUFnZlZ4dVhHNGdJSE4wWVhScFl5Qm5aWFJEYjI1bWFXY29LVG9nVEc5bloybHVaME52Ym1acFp5QjdYRzRnSUNBZ2NtVjBkWEp1SUU5aWFtVmpkQzVoYzNOcFoyNG9lMzBzSUhSb2FYTXVYMk52Ym1acFp5azdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlGSmxkSEpwWlhabGN5QnZjaUJqY21WaGRHVnpJSFJvWlNCbmJHOWlZV3dnYkc5bloyVnlJR2x1YzNSaGJtTmxMbHh1SUNBZ0tpQkFjM1Z0YldGeWVTQlNaWFIxY201eklIUm9aU0JsZUdsemRHbHVaeUJuYkc5aVlXd2diRzluWjJWeUlHOXlJR055WldGMFpYTWdZU0J1WlhjZ2IyNWxJR2xtSUdsMElHUnZaWE51SjNRZ1pYaHBjM1F1WEc0Z0lDQXFYRzRnSUNBcUlFQnlaWFIxY200Z1ZHaGxJR2RzYjJKaGJDQldaWEppYjNOcGRIbE1iMmRuWlhJZ2FXNXpkR0Z1WTJVdVhHNGdJQ0FxTDF4dUlDQnpkR0YwYVdNZ1oyVjBLQ2s2SUV4dloyZGxjaUI3WEc0Z0lDQWdkR2hwY3k1bmJHOWlZV3dnUFNCMGFHbHpMbWRzYjJKaGJDQS9JSFJvYVhNdVoyeHZZbUZzSURvZ2RHaHBjeTVmWm1GamRHOXllU2hjSWt4dloyZHBibWRjSWlrN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVoyeHZZbUZzTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJNYjJkeklHRWdkbVZ5WW05elpTQnRaWE56WVdkbExseHVJQ0FnS2lCQWMzVnRiV0Z5ZVNCRVpXeGxaMkYwWlhNZ2RHaGxJSFpsY21KdmMyVWdiRzluWjJsdVp5QjBieUIwYUdVZ1oyeHZZbUZzSUd4dloyZGxjaUJwYm5OMFlXNWpaUzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUcxelp5QXRJRlJvWlNCdFpYTnpZV2RsSUhSdklHSmxJR3h2WjJkbFpDNWNiaUFnSUNvZ1FIQmhjbUZ0SUhabGNtSnZjMmwwZVNBdElGUm9aU0IyWlhKaWIzTnBkSGtnYkdWMlpXd2diMllnZEdobElHMWxjM05oWjJVZ0tHUmxabUYxYkhRNklEQXBMbHh1SUNBZ0tpOWNiaUFnYzNSaGRHbGpJSFpsY21KdmMyVW9iWE5uT2lCVGRISnBibWRNYVd0bExDQjJaWEppYjNOcGRIazZJRzUxYldKbGNpQTlJREFwT2lCMmIybGtJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVuWlhRb0tTNTJaWEppYjNObEtHMXpaeXdnZG1WeVltOXphWFI1S1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnVEc5bmN5QmhiaUJwYm1adklHMWxjM05oWjJVdVhHNGdJQ0FxSUVCemRXMXRZWEo1SUVSbGJHVm5ZWFJsY3lCMGFHVWdhVzVtYnlCc2IyZG5hVzVuSUhSdklIUm9aU0JuYkc5aVlXd2diRzluWjJWeUlHbHVjM1JoYm1ObExseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdiWE5uSUMwZ1ZHaGxJRzFsYzNOaFoyVWdkRzhnWW1VZ2JHOW5aMlZrTGx4dUlDQWdLaTljYmlBZ2MzUmhkR2xqSUdsdVptOG9iWE5uT2lCVGRISnBibWRNYVd0bEtUb2dkbTlwWkNCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVoyVjBLQ2t1YVc1bWJ5aHRjMmNwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJNYjJkeklHRWdaR1ZpZFdjZ2JXVnpjMkZuWlM1Y2JpQWdJQ29nUUhOMWJXMWhjbmtnUkdWc1pXZGhkR1Z6SUhSb1pTQmtaV0oxWnlCc2IyZG5hVzVuSUhSdklIUm9aU0JuYkc5aVlXd2diRzluWjJWeUlHbHVjM1JoYm1ObExseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdiWE5uSUMwZ1ZHaGxJRzFsYzNOaFoyVWdkRzhnWW1VZ2JHOW5aMlZrTGx4dUlDQWdLaTljYmlBZ2MzUmhkR2xqSUdSbFluVm5LRzF6WnpvZ1UzUnlhVzVuVEdsclpTazZJSFp2YVdRZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtZGxkQ2dwTG1SbFluVm5LRzF6WnlrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUV4dlozTWdZU0J6YVd4c2VTQnRaWE56WVdkbExseHVJQ0FnS2lCQWMzVnRiV0Z5ZVNCRVpXeGxaMkYwWlhNZ2RHaGxJR1JsWW5WbklHeHZaMmRwYm1jZ2RHOGdkR2hsSUdkc2IySmhiQ0JzYjJkblpYSWdhVzV6ZEdGdVkyVXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0J0YzJjZ0xTQlVhR1VnYldWemMyRm5aU0IwYnlCaVpTQnNiMmRuWldRdVhHNGdJQ0FxTDF4dUlDQnpkR0YwYVdNZ2MybHNiSGtvYlhObk9pQlRkSEpwYm1kTWFXdGxLVG9nZG05cFpDQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVaMlYwS0NrdWMybHNiSGtvYlhObktUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1RHOW5jeUJoYmlCbGNuSnZjaUJ0WlhOellXZGxMbHh1SUNBZ0tpQkFjM1Z0YldGeWVTQkVaV3hsWjJGMFpYTWdkR2hsSUdWeWNtOXlJR3h2WjJkcGJtY2dkRzhnZEdobElHZHNiMkpoYkNCc2IyZG5aWElnYVc1emRHRnVZMlV1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCdGMyY2dMU0JVYUdVZ2JXVnpjMkZuWlNCMGJ5QmlaU0JzYjJkblpXUXVYRzRnSUNBcUwxeHVJQ0J6ZEdGMGFXTWdaWEp5YjNJb2JYTm5PaUJUZEhKcGJtZE1hV3RsS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WjJWMEtDa3VaWEp5YjNJb2JYTm5LVHRjYmlBZ2ZWeHVYRzRnSUhOMFlYUnBZeUJtYjNJb1hHNGdJQ0FnYjJKcVpXTjBPaUJNYjJkbmFXNW5RMjl1ZEdWNGRDeGNiaUFnSUNCamIyNW1hV2MvT2lCUVlYSjBhV0ZzUEV4dloyZHBibWREYjI1bWFXYytMRnh1SUNBZ0lDNHVMbUZ5WjNNNklHRnVlVnRkWEc0Z0lDazZJRXh2WjJkbGNpQjdYRzRnSUNBZ2IySnFaV04wSUQxY2JpQWdJQ0FnSUhSNWNHVnZaaUJ2WW1wbFkzUWdQVDA5SUZ3aWMzUnlhVzVuWENKY2JpQWdJQ0FnSUNBZ1B5QnZZbXBsWTNSY2JpQWdJQ0FnSUNBZ09pQnZZbXBsWTNRdVkyOXVjM1J5ZFdOMGIzSmNiaUFnSUNBZ0lDQWdJQ0EvSUc5aWFtVmpkQzVqYjI1emRISjFZM1J2Y2k1dVlXMWxYRzRnSUNBZ0lDQWdJQ0FnT2lCdlltcGxZM1F1Ym1GdFpUdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NWZabUZqZEc5eWVTaHZZbXBsWTNRc0lHTnZibVpwWnl3Z0xpNHVZWEpuY3lrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUVOeVpXRjBaWE1nWVNCc2IyZG5aWElnWm05eUlHRWdjM0JsWTJsbWFXTWdjbVZoYzI5dUlHOXlJR052Ym5SbGVIUXVYRzRnSUNBcVhHNGdJQ0FxSUVCemRXMXRZWEo1SUZSb2FYTWdjM1JoZEdsaklHMWxkR2h2WkNCamNtVmhkR1Z6SUdFZ2JtVjNJR3h2WjJkbGNpQnBibk4wWVc1alpTQjFjMmx1WnlCMGFHVWdabUZqZEc5eWVTQm1kVzVqZEdsdmJpeGNiaUFnSUNvZ1ltRnpaV1FnYjI0Z1lTQm5hWFpsYmlCeVpXRnpiMjRnYjNJZ1kyOXVkR1Y0ZEM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElISmxZWE52YmlBdElFRWdjM1J5YVc1bklHUmxjMk55YVdKcGJtY2dkR2hsSUhKbFlYTnZiaUJ2Y2lCamIyNTBaWGgwSUdadmNpQmpjbVZoZEdsdVp5QjBhR2x6SUd4dloyZGxjaTVjYmlBZ0lDb2dRSEJoY21GdElHbGtYRzRnSUNBcUlFQnlaWFIxY201eklFRWdibVYzSUZabGNtSnZjMmwwZVV4dloyZGxjaUJ2Y2lCRGJHRnpjMHh2WjJkbGNpQnBibk4wWVc1alpTNWNiaUFnSUNvdlhHNGdJSE4wWVhScFl5QmlaV05oZFhObEtISmxZWE52YmpvZ2MzUnlhVzVuTENCcFpEODZJSE4wY21sdVp5azZJRXh2WjJkbGNpQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVYMlpoWTNSdmNua29jbVZoYzI5dUxDQjBhR2x6TGw5amIyNW1hV2NzSUdsa0tUdGNiaUFnZlZ4dVhHNGdJSE4wWVhScFl5QjBhR1Z0WlNoY2JpQWdJQ0IwWlhoME9pQnpkSEpwYm1jc1hHNGdJQ0FnZEhsd1pUb2dhMlY1YjJZZ1ZHaGxiV1VnZkNCclpYbHZaaUJNYjJkTVpYWmxiQ3hjYmlBZ0lDQnNiMmRuWlhKTVpYWmxiRG9nVEc5blRHVjJaV3dzWEc0Z0lDQWdkR1Z0Y0d4aGRHVTZJRlJvWlcxbElEMGdSR1ZtWVhWc2RGUm9aVzFsWEc0Z0lDa2dlMXh1SUNBZ0lHbG1JQ2doZEdocGN5NWZZMjl1Wm1sbkxuTjBlV3hsS1NCeVpYUjFjbTRnZEdWNGREdGNiaUFnSUNCamIyNXpkQ0JzYjJkblpYSWdQU0JNYjJkbmFXNW5MbWRsZENncExtWnZjaWgwYUdsekxuUm9aVzFsS1R0Y2JseHVJQ0FnSUdaMWJtTjBhVzl1SUdGd2NHeDVLRnh1SUNBZ0lDQWdkSGgwT2lCemRISnBibWNzWEc0Z0lDQWdJQ0J2Y0hScGIyNDZJR3RsZVc5bUlGUm9aVzFsVDNCMGFXOXVMRnh1SUNBZ0lDQWdkbUZzZFdVNklHNTFiV0psY2lCOElGdHVkVzFpWlhKZElId2dXMjUxYldKbGNpd2diblZ0WW1WeUxDQnVkVzFpWlhKZElId2diblZ0WW1WeVcxMGdmQ0J6ZEhKcGJtZGJYVnh1SUNBZ0lDazZJSE4wY21sdVp5QjdYRzRnSUNBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0IwT2lCemRISnBibWNnZkNCVGRIbHNaV1JUZEhKcGJtY2dQU0IwZUhRN1hHNGdJQ0FnSUNBZ0lHeGxkQ0JqSUQwZ2MzUjViR1VvZENrN1hHNWNiaUFnSUNBZ0lDQWdablZ1WTNScGIyNGdZWEJ3YkhsRGIyeHZjaWhjYmlBZ0lDQWdJQ0FnSUNCMllXdzZJRzUxYldKbGNpQjhJRnR1ZFcxaVpYSmRJSHdnVzI1MWJXSmxjaXdnYm5WdFltVnlMQ0J1ZFcxaVpYSmRMRnh1SUNBZ0lDQWdJQ0FnSUdselFtY2dQU0JtWVd4elpWeHVJQ0FnSUNBZ0lDQXBPaUJUZEhsc1pXUlRkSEpwYm1jZ2UxeHVJQ0FnSUNBZ0lDQWdJR3hsZENCbU9seHVJQ0FnSUNBZ0lDQWdJQ0FnZkNCMGVYQmxiMllnWXk1aVlXTnJaM0p2ZFc1a1hHNGdJQ0FnSUNBZ0lDQWdJQ0I4SUhSNWNHVnZaaUJqTG1admNtVm5jbTkxYm1SY2JpQWdJQ0FnSUNBZ0lDQWdJSHdnZEhsd1pXOW1JR011Y21kaVhHNGdJQ0FnSUNBZ0lDQWdJQ0I4SUhSNWNHVnZaaUJqTG1OdmJHOXlNalUySUQwZ2FYTkNaeUEvSUdNdVltRmphMmR5YjNWdVpDQTZJR011Wm05eVpXZHliM1Z1WkR0Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvSVVGeWNtRjVMbWx6UVhKeVlYa29kbUZzS1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2htSUdGeklIUjVjR1Z2WmlCakxtSmhZMnRuY205MWJtUWdmQ0IwZVhCbGIyWWdZeTVtYjNKbFozSnZkVzVrS1M1allXeHNLRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQmpMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQjJZV3gxWlNCaGN5QnVkVzFpWlhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJSE4zYVhSamFDQW9kbUZzTG14bGJtZDBhQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNBeE9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCbUlEMGdhWE5DWnlBL0lHTXVZbWREYjJ4dmNqSTFOaUE2SUdNdVkyOXNiM0l5TlRZN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUFvWmlCaGN5QjBlWEJsYjJZZ1l5NWlaME52Ykc5eU1qVTJJSHdnZEhsd1pXOW1JR011WTI5c2IzSXlOVFlwS0haaGJGc3dYU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSURNNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdZZ1BTQnBjMEpuSUQ4Z1l5NWlaMUpuWWlBNklHTXVjbWRpTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZeTV5WjJJb2RtRnNXekJkTENCMllXeGJNVjBzSUhaaGJGc3lYU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCc2IyZG5aWEl1WlhKeWIzSW9ZRTV2ZENCaElIWmhiR2xrSUdOdmJHOXlJRzl3ZEdsdmJqb2dKSHR2Y0hScGIyNTlZQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnpkSGxzWlNoMElHRnpJSE4wY21sdVp5azdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdablZ1WTNScGIyNGdZWEJ3YkhsVGRIbHNaU2gyT2lCdWRXMWlaWElnZkNCemRISnBibWNwT2lCMmIybGtJSHRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlIWWdQVDA5SUZ3aWJuVnRZbVZ5WENJcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdNZ1BTQmpMbk4wZVd4bEtIWXBPMXh1SUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpJRDBnWTF0MklHRnpJR3RsZVc5bUlFTnZiRzl5YVhwbFQzQjBhVzl1YzEwZ1lYTWdVM1I1YkdWa1UzUnlhVzVuTzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUhOM2FYUmphQ0FvYjNCMGFXOXVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ1kyRnpaU0JjSW1KblhDSTZYRzRnSUNBZ0lDQWdJQ0FnWTJGelpTQmNJbVpuWENJNlhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZWEJ3YkhsRGIyeHZjaWgyWVd4MVpTQmhjeUJ1ZFcxaVpYSXBMblJsZUhRN1hHNGdJQ0FnSUNBZ0lDQWdZMkZ6WlNCY0luTjBlV3hsWENJNlhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1FYSnlZWGt1YVhOQmNuSmhlU2gyWVd4MVpTa3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZzZFdVdVptOXlSV0ZqYUNoaGNIQnNlVk4wZVd4bEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR0Z3Y0d4NVUzUjViR1VvZG1Gc2RXVWdZWE1nYm5WdFltVnlJSHdnYzNSeWFXNW5LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJqTG5SbGVIUTdYRzRnSUNBZ0lDQWdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJQ0FnSUNBZ0lHeHZaMmRsY2k1bGNuSnZjaWhnVG05MElHRWdkbUZzYVdRZ2RHaGxiV1VnYjNCMGFXOXVPaUFrZTI5d2RHbHZibjFnS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUM4dklHVnpiR2x1ZEMxa2FYTmhZbXhsTFc1bGVIUXRiR2x1WlNCQWRIbHdaWE5qY21sd2RDMWxjMnhwYm5RdmJtOHRkVzUxYzJWa0xYWmhjbk5jYmlBZ0lDQWdJSDBnWTJGMFkyZ2dLR1U2SUhWdWEyNXZkMjRwSUh0Y2JpQWdJQ0FnSUNBZ2JHOW5aMlZ5TG1WeWNtOXlLR0JGY25KdmNpQmhjSEJzZVdsdVp5QnpkSGxzWlRvZ0pIdHZjSFJwYjI1OUlIZHBkR2dnZG1Gc2RXVWdKSHQyWVd4MVpYMWdLVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFI0ZER0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0JqYjI1emRDQnBibVJwZG1sa2RXRnNWR2hsYldVZ1BTQjBaVzF3YkdGMFpWdDBlWEJsSUdGeklHdGxlVzltSUZSb1pXMWxYVHRjYmlBZ0lDQnBaaUFvSVdsdVpHbDJhV1IxWVd4VWFHVnRaU0I4ZkNBaFQySnFaV04wTG10bGVYTW9hVzVrYVhacFpIVmhiRlJvWlcxbEtTNXNaVzVuZEdncElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCMFpYaDBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHeGxkQ0JoWTNSMVlXeFVhR1Z0WlRvZ1ZHaGxiV1ZQY0hScGIyNGdQU0JwYm1ScGRtbGtkV0ZzVkdobGJXVWdZWE1nVkdobGJXVlBjSFJwYjI0N1hHNWNiaUFnSUNCamIyNXpkQ0JzYjJkTVpYWmxiSE1nUFNCUFltcGxZM1F1WVhOemFXZHVLSHQ5TENCTWIyZE1aWFpsYkNrN1hHNGdJQ0FnYVdZZ0tFOWlhbVZqZEM1clpYbHpLR2x1WkdsMmFXUjFZV3hVYUdWdFpTbGJNRjBnYVc0Z2JHOW5UR1YyWld4ektWeHVJQ0FnSUNBZ1lXTjBkV0ZzVkdobGJXVWdQVnh1SUNBZ0lDQWdJQ0FvYVc1a2FYWnBaSFZoYkZSb1pXMWxJR0Z6SUZSb1pXMWxUM0IwYVc5dVFubE1iMmRNWlhabGJDbGJiRzluWjJWeVRHVjJaV3hkSUh4OElIdDlPMXh1WEc0Z0lDQWdjbVYwZFhKdUlFOWlhbVZqZEM1clpYbHpLR0ZqZEhWaGJGUm9aVzFsS1M1eVpXUjFZMlVvS0dGall6b2djM1J5YVc1bkxDQnJaWGs2SUhOMGNtbHVaeWtnUFQ0Z2UxeHVJQ0FnSUNBZ1kyOXVjM1FnZG1Gc0lEMGdLR0ZqZEhWaGJGUm9aVzFsSUdGeklGUm9aVzFsVDNCMGFXOXVLVnRyWlhrZ1lYTWdhMlY1YjJZZ1ZHaGxiV1ZQY0hScGIyNWRPMXh1SUNBZ0lDQWdhV1lnS0haaGJDbGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHRndjR3g1S0Z4dUlDQWdJQ0FnSUNBZ0lHRmpZeXhjYmlBZ0lDQWdJQ0FnSUNCclpYa2dZWE1nYTJWNWIyWWdWR2hsYldWUGNIUnBiMjRzWEc0Z0lDQWdJQ0FnSUNBZ2RtRnNJR0Z6WEc0Z0lDQWdJQ0FnSUNBZ0lDQjhJRzUxYldKbGNseHVJQ0FnSUNBZ0lDQWdJQ0FnZkNCYmJuVnRZbVZ5WFZ4dUlDQWdJQ0FnSUNBZ0lDQWdmQ0JiYm5WdFltVnlMQ0J1ZFcxaVpYSXNJRzUxYldKbGNsMWNiaUFnSUNBZ0lDQWdJQ0FnSUh3Z2JuVnRZbVZ5VzExY2JpQWdJQ0FnSUNBZ0lDQWdJSHdnYzNSeWFXNW5XMTFjYmlBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUhKbGRIVnliaUJoWTJNN1hHNGdJQ0FnZlN3Z2RHVjRkQ2s3WEc0Z0lIMWNibjFjYmlKZGZRPT0iLCJpbXBvcnQge1xuICBBbnN3ZXJzLFxuICBDaG9pY2UsXG4gIEZhbHN5LFxuICBJbml0aWFsUmV0dXJuVmFsdWUsXG4gIFByZXZDYWxsZXIsXG4gIFByb21wdE9iamVjdCxcbiAgUHJvbXB0VHlwZSxcbiAgVmFsdWVPckZ1bmMsXG59IGZyb20gXCJwcm9tcHRzXCI7XG5pbXBvcnQgcHJvbXB0cyBmcm9tIFwicHJvbXB0c1wiO1xuaW1wb3J0IHsgcGFyc2VBcmdzLCBQYXJzZUFyZ3NDb25maWcgfSBmcm9tIFwidXRpbFwiO1xuaW1wb3J0IHsgV3JpdGFibGUsIFJlYWRhYmxlIH0gZnJvbSBcInN0cmVhbVwiO1xuaW1wb3J0IHsgUGFyc2VBcmdzT3B0aW9uc0NvbmZpZywgUGFyc2VBcmdzUmVzdWx0IH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IExvZ2dpbmcgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVwcmVzZW50cyBhIHVzZXIgaW5wdXQgcHJvbXB0IHdpdGggdmFyaW91cyBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gKiBAc3VtbWFyeSBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgZmxleGlibGUgaW50ZXJmYWNlIGZvciBjcmVhdGluZyBhbmQgbWFuYWdpbmcgdXNlciBpbnB1dCBwcm9tcHRzLlxuICogSXQgaW1wbGVtZW50cyB0aGUgUHJvbXB0T2JqZWN0IGludGVyZmFjZSBmcm9tIHRoZSAncHJvbXB0cycgbGlicmFyeSBhbmQgb2ZmZXJzIG1ldGhvZHMgdG8gc2V0XG4gKiB2YXJpb3VzIHByb3BlcnRpZXMgb2YgdGhlIHByb21wdC4gVGhlIGNsYXNzIGFsc28gaW5jbHVkZXMgc3RhdGljIG1ldGhvZHMgZm9yIGNvbW1vbiBpbnB1dCBzY2VuYXJpb3NcbiAqIGFuZCBhcmd1bWVudCBwYXJzaW5nLlxuICpcbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHR5cGUgb2YgdGhlIHByb21wdCBuYW1lLCBleHRlbmRpbmcgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb21wdCwgdXNlZCBhcyB0aGUga2V5IGluIHRoZSByZXR1cm5lZCBhbnN3ZXJzIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBVc2VySW5wdXQgfSBmcm9tICdAZGVjYWYtdHMvdXRpbHMnO1xuICpcbiAqIC8vIENyZWF0ZSBhIHNpbXBsZSB0ZXh0IGlucHV0XG4gKiBjb25zdCBuYW1lSW5wdXQgPSBuZXcgVXNlcklucHV0KCduYW1lJylcbiAqICAgLnNldE1lc3NhZ2UoJ1doYXQgaXMgeW91ciBuYW1lPycpXG4gKiAgIC5zZXRJbml0aWFsKCdVc2VyJyk7XG4gKlxuICogLy8gQ3JlYXRlIGEgbnVtYmVyIGlucHV0IHdpdGggdmFsaWRhdGlvblxuICogY29uc3QgYWdlSW5wdXQgPSBuZXcgVXNlcklucHV0KCdhZ2UnKVxuICogICAuc2V0VHlwZSgnbnVtYmVyJylcbiAqICAgLnNldE1lc3NhZ2UoJ0hvdyBvbGQgYXJlIHlvdT8nKVxuICogICAuc2V0TWluKDApXG4gKiAgIC5zZXRNYXgoMTIwKTtcbiAqXG4gKiAvLyBBc2sgZm9yIGlucHV0IGFuZCBwcm9jZXNzIHRoZSByZXN1bHRzXG4gKiBhc3luYyBmdW5jdGlvbiBnZXRVc2VySW5mbygpIHtcbiAqICAgY29uc3QgYW5zd2VycyA9IGF3YWl0IFVzZXJJbnB1dC5hc2soW25hbWVJbnB1dCwgYWdlSW5wdXRdKTtcbiAqICAgY29uc29sZS5sb2coYEhlbGxvICR7YW5zd2Vycy5uYW1lfSwgeW91IGFyZSAke2Fuc3dlcnMuYWdlfSB5ZWFycyBvbGQuYCk7XG4gKiB9XG4gKlxuICogZ2V0VXNlckluZm8oKTtcbiAqIGBgYFxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2xpZW50XG4gKiAgIHBhcnRpY2lwYW50IFVzZXJJbnB1dFxuICogICBwYXJ0aWNpcGFudCBQcm9tcHRMaWJyYXJ5XG4gKlxuICogICBDbGllbnQtPj5Vc2VySW5wdXQ6IG5ldyBVc2VySW5wdXQobmFtZSlcbiAqICAgQ2xpZW50LT4+VXNlcklucHV0OiBzZXRNZXNzYWdlKG1lc3NhZ2UpXG4gKiAgIENsaWVudC0+PlVzZXJJbnB1dDogc2V0VHlwZSh0eXBlKVxuICogICBDbGllbnQtPj5Vc2VySW5wdXQ6IHNldEluaXRpYWwoaW5pdGlhbClcbiAqICAgQ2xpZW50LT4+VXNlcklucHV0OiBPdGhlciBjb25maWd1cmF0aW9uIG1ldGhvZHNcbiAqXG4gKiAgIENsaWVudC0+PlVzZXJJbnB1dDogYXNrKClcbiAqICAgVXNlcklucHV0LT4+UHJvbXB0TGlicmFyeTogcHJvbXB0cyhxdWVzdGlvbilcbiAqICAgUHJvbXB0TGlicmFyeS0+PkNsaWVudDogRGlzcGxheSBwcm9tcHRcbiAqICAgQ2xpZW50LT4+UHJvbXB0TGlicmFyeTogVXNlciBwcm92aWRlcyBpbnB1dFxuICogICBQcm9tcHRMaWJyYXJ5LT4+VXNlcklucHV0OiBSZXR1cm4gYW5zd2Vyc1xuICogICBVc2VySW5wdXQtPj5DbGllbnQ6IFJldHVybiBwcm9jZXNzZWQgYW5zd2Vyc1xuICovXG5leHBvcnQgY2xhc3MgVXNlcklucHV0PFIgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+IGltcGxlbWVudHMgUHJvbXB0T2JqZWN0PFI+IHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgbG9nZ2VyID0gTG9nZ2luZy5mb3IoVXNlcklucHV0KTtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgdHlwZSBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIHRoZSBpbnB1dCBtZXRob2QgKGUuZy4sIHRleHQsIG51bWJlciwgY29uZmlybSkuXG4gICAqL1xuICB0eXBlOiBQcm9tcHRUeXBlIHwgRmFsc3kgfCBQcmV2Q2FsbGVyPFIsIFByb21wdFR5cGUgfCBGYWxzeT4gPSBcInRleHRcIjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBuYW1lIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IFVzZWQgYXMgdGhlIGtleSBpbiB0aGUgcmV0dXJuZWQgYW5zd2VycyBvYmplY3QuXG4gICAqL1xuICBuYW1lOiBWYWx1ZU9yRnVuYzxSPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBtZXNzYWdlIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICogQHN1bW1hcnkgVGhlIHF1ZXN0aW9uIG9yIGluc3RydWN0aW9uIHByZXNlbnRlZCB0byB0aGUgdXNlci5cbiAgICovXG4gIG1lc3NhZ2U/OiBWYWx1ZU9yRnVuYzxzdHJpbmc+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgVGhlIGRlZmF1bHQgdmFsdWUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgaW5pdGlhbD86XG4gICAgfCBJbml0aWFsUmV0dXJuVmFsdWVcbiAgICB8IFByZXZDYWxsZXI8UiwgSW5pdGlhbFJldHVyblZhbHVlIHwgUHJvbWlzZTxJbml0aWFsUmV0dXJuVmFsdWU+PlxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHN0eWxlIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IERldGVybWluZXMgdGhlIHZpc3VhbCBzdHlsZSBvZiB0aGUgcHJvbXB0LlxuICAgKi9cbiAgc3R5bGU/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBmb3JtYXQgZnVuY3Rpb24gZm9yIHRoZSBpbnB1dC5cbiAgICogQHN1bW1hcnkgQSBmdW5jdGlvbiB0byBmb3JtYXQgdGhlIHVzZXIncyBpbnB1dCBiZWZvcmUgaXQncyByZXR1cm5lZC5cbiAgICovXG4gIGZvcm1hdD86IFByZXZDYWxsZXI8Uiwgdm9pZD4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgdmFsaWRhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGlucHV0LlxuICAgKiBAc3VtbWFyeSBBIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSB1c2VyJ3MgaW5wdXQuXG4gICAqL1xuICB2YWxpZGF0ZT86XG4gICAgfCBQcmV2Q2FsbGVyPFIsIGJvb2xlYW4gfCBzdHJpbmcgfCBQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+PlxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG9uU3RhdGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEBzdW1tYXJ5IEEgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIHN0YXRlIG9mIHRoZSBwcm9tcHQgY2hhbmdlcy5cbiAgICovXG4gIG9uU3RhdGU/OiBQcmV2Q2FsbGVyPFIsIHZvaWQ+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG1pbmltdW0gdmFsdWUgZm9yIG51bWJlciBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBsb3dlc3QgbnVtYmVyIHRoZSB1c2VyIGNhbiBpbnB1dC5cbiAgICovXG4gIG1pbj86IG51bWJlciB8IFByZXZDYWxsZXI8UiwgbnVtYmVyIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG1heGltdW0gdmFsdWUgZm9yIG51bWJlciBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBoaWdoZXN0IG51bWJlciB0aGUgdXNlciBjYW4gaW5wdXQuXG4gICAqL1xuICBtYXg/OiBudW1iZXIgfCBQcmV2Q2FsbGVyPFIsIG51bWJlciB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFdoZXRoZXIgdG8gYWxsb3cgZmxvYXQgdmFsdWVzIGZvciBudW1iZXIgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBJZiB0cnVlLCBhbGxvd3MgZGVjaW1hbCBudW1iZXJzLlxuICAgKi9cbiAgZmxvYXQ/OiBib29sZWFuIHwgUHJldkNhbGxlcjxSLCBib29sZWFuIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyB0byByb3VuZCB0byBmb3IgZmxvYXQgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIHRoZSBwcmVjaXNpb24gb2YgZmxvYXQgaW5wdXRzLlxuICAgKi9cbiAgcm91bmQ/OiBudW1iZXIgfCBQcmV2Q2FsbGVyPFIsIG51bWJlciB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEluc3RydWN0aW9ucyBmb3IgdGhlIHVzZXIuXG4gICAqIEBzdW1tYXJ5IEFkZGl0aW9uYWwgZ3VpZGFuY2UgcHJvdmlkZWQgdG8gdGhlIHVzZXIuXG4gICAqL1xuICBpbnN0cnVjdGlvbnM/OiBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGluY3JlbWVudCB2YWx1ZSBmb3IgbnVtYmVyIGlucHV0cy5cbiAgICogQHN1bW1hcnkgVGhlIHN0ZXAgc2l6ZSB3aGVuIGluY3JlYXNpbmcgb3IgZGVjcmVhc2luZyB0aGUgbnVtYmVyLlxuICAgKi9cbiAgaW5jcmVtZW50PzogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgc2VwYXJhdG9yIGZvciBsaXN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgVGhlIGNoYXJhY3RlciB1c2VkIHRvIHNlcGFyYXRlIGxpc3QgaXRlbXMuXG4gICAqL1xuICBzZXBhcmF0b3I/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBhY3RpdmUgb3B0aW9uIHN0eWxlIGZvciBzZWxlY3QgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBUaGUgc3R5bGUgYXBwbGllZCB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9wdGlvbi5cbiAgICovXG4gIGFjdGl2ZT86IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGluYWN0aXZlIG9wdGlvbiBzdHlsZSBmb3Igc2VsZWN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgVGhlIHN0eWxlIGFwcGxpZWQgdG8gbm9uLXNlbGVjdGVkIG9wdGlvbnMuXG4gICAqL1xuICBpbmFjdGl2ZT86IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGF2YWlsYWJsZSBjaG9pY2VzIGZvciBzZWxlY3QsIG11bHRpc2VsZWN0LCBvciBhdXRvY29tcGxldGUgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBBbiBhcnJheSBvZiBvcHRpb25zIHRoYXQgdGhlIHVzZXIgY2FuIHNlbGVjdCBmcm9tIGluIGNob2ljZS1iYXNlZCBwcm9tcHRzLlxuICAgKi9cbiAgY2hvaWNlcz86IENob2ljZVtdIHwgUHJldkNhbGxlcjxSLCBDaG9pY2VbXSB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBoaW50IHRleHQgZm9yIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgaGludD86IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHdhcm5pbmcgdGV4dCBmb3IgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQSB3YXJuaW5nIG1lc3NhZ2UgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgd2Fybj86IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIHN1Z2dlc3Q/OiAoKGlucHV0OiBhbnksIGNob2ljZXM6IENob2ljZVtdKSA9PiBQcm9taXNlPGFueT4pIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGxpbWl0IGZvciBsaXN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIHNlbGVjdGVkLlxuICAgKi9cbiAgbGltaXQ/OiBudW1iZXIgfCBQcmV2Q2FsbGVyPFIsIG51bWJlciB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBtYXNrIGZvciBwYXNzd29yZCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBjaGFyYWN0ZXIgdXNlZCB0byBoaWRlIHRoZSB1c2VyJ3MgaW5wdXQuXG4gICAqL1xuICBtYXNrPzogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgc3Rkb3V0IHN0cmVhbSBmb3IgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgVGhlIG91dHB1dCBzdHJlYW0gdXNlZCBieSB0aGUgcHJvbXB0LlxuICAgKi9cbiAgc3Rkb3V0PzogV3JpdGFibGUgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgc3RkaW4gc3RyZWFtIGZvciB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBUaGUgaW5wdXQgc3RyZWFtIHVzZWQgYnkgdGhlIHByb21wdC5cbiAgICovXG4gIHN0ZGluPzogUmVhZGFibGUgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IobmFtZTogVmFsdWVPckZ1bmM8Uj4pIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSB0eXBlIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIGlucHV0IG1ldGhvZCBmb3IgdGhlIHByb21wdC5cbiAgICpcbiAgICogQHBhcmFtIHR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgcHJvbXB0LlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0VHlwZSh0eXBlOiBQcm9tcHRUeXBlIHwgRmFsc3kgfCBQcmV2Q2FsbGVyPFIsIFByb21wdFR5cGUgfCBGYWxzeT4pOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgdHlwZSB0bzogJHt0eXBlfWApO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIG1lc3NhZ2Ugb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgcXVlc3Rpb24gb3IgaW5zdHJ1Y3Rpb24gcHJlc2VudGVkIHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgbWVzc2FnZSB0byBiZSBkaXNwbGF5ZWQuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRNZXNzYWdlKHZhbHVlOiBWYWx1ZU9yRnVuYzxzdHJpbmc+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIG1lc3NhZ2UgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5tZXNzYWdlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgZGVmYXVsdCB2YWx1ZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbml0aWFsIHZhbHVlLlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0SW5pdGlhbChcbiAgICB2YWx1ZTpcbiAgICAgIHwgSW5pdGlhbFJldHVyblZhbHVlXG4gICAgICB8IFByZXZDYWxsZXI8UiwgSW5pdGlhbFJldHVyblZhbHVlIHwgUHJvbWlzZTxJbml0aWFsUmV0dXJuVmFsdWU+PlxuICAgICAgfCB1bmRlZmluZWRcbiAgKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGluaXRpYWwgdmFsdWUgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5pbml0aWFsID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIHN0eWxlIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIHZpc3VhbCBzdHlsZSBvZiB0aGUgcHJvbXB0LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgc3R5bGUgdG8gYmUgYXBwbGllZC5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldFN0eWxlKHZhbHVlOiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBzdHlsZSB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLnN0eWxlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGZvcm1hdCBmdW5jdGlvbiBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIGEgZnVuY3Rpb24gdG8gZm9ybWF0IHRoZSB1c2VyJ3MgaW5wdXQgYmVmb3JlIGl0J3MgcmV0dXJuZWQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBmb3JtYXQgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRGb3JtYXQodmFsdWU6IFByZXZDYWxsZXI8Uiwgdm9pZD4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgZm9ybWF0IGZ1bmN0aW9uYCk7XG4gICAgdGhpcy5mb3JtYXQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgdmFsaWRhdGlvbiBmdW5jdGlvbiBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIGEgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIHVzZXIncyBpbnB1dC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbGlkYXRpb24gZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRWYWxpZGF0ZShcbiAgICB2YWx1ZTpcbiAgICAgIHwgUHJldkNhbGxlcjxSLCBib29sZWFuIHwgc3RyaW5nIHwgUHJvbWlzZTxib29sZWFuIHwgc3RyaW5nPj5cbiAgICAgIHwgdW5kZWZpbmVkXG4gICk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyB2YWxpZGF0ZSBmdW5jdGlvbmApO1xuICAgIHRoaXMudmFsaWRhdGUgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgb25TdGF0ZSBjYWxsYmFjayBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHN0YXRlIG9mIHRoZSBwcm9tcHQgY2hhbmdlcy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIG9uU3RhdGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRPblN0YXRlKHZhbHVlOiBQcmV2Q2FsbGVyPFIsIHZvaWQ+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIG9uU3RhdGUgY2FsbGJhY2tgKTtcbiAgICB0aGlzLm9uU3RhdGUgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgbWluaW11bSB2YWx1ZSBmb3IgbnVtYmVyIGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgbG93ZXN0IG51bWJlciB0aGUgdXNlciBjYW4gaW5wdXQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBtaW5pbXVtIHZhbHVlLlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0TWluKHZhbHVlOiBudW1iZXIgfCBQcmV2Q2FsbGVyPFIsIG51bWJlciB8IEZhbHN5PiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBtaW4gdmFsdWUgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5taW4gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgbWF4aW11bSB2YWx1ZSBmb3IgbnVtYmVyIGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgaGlnaGVzdCBudW1iZXIgdGhlIHVzZXIgY2FuIGlucHV0LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgbWF4aW11bSB2YWx1ZS5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldE1heCh2YWx1ZTogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgbWF4IHZhbHVlIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMubWF4ID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgd2hldGhlciB0byBhbGxvdyBmbG9hdCB2YWx1ZXMgZm9yIG51bWJlciBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgd2hldGhlciBkZWNpbWFsIG51bWJlcnMgYXJlIGFsbG93ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFdoZXRoZXIgdG8gYWxsb3cgZmxvYXQgdmFsdWVzLlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0RmxvYXQodmFsdWU6IGJvb2xlYW4gfCBQcmV2Q2FsbGVyPFIsIGJvb2xlYW4gfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgZmxvYXQgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5mbG9hdCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgdG8gcm91bmQgdG8gZm9yIGZsb2F0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgcHJlY2lzaW9uIG9mIGZsb2F0IGlucHV0cy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcy5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldFJvdW5kKHZhbHVlOiBudW1iZXIgfCBQcmV2Q2FsbGVyPFIsIG51bWJlciB8IEZhbHN5PiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyByb3VuZCB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLnJvdW5kID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGluc3RydWN0aW9ucyBmb3IgdGhlIHVzZXIuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgYWRkaXRpb25hbCBndWlkYW5jZSBwcm92aWRlZCB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGluc3RydWN0aW9ucy5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldEluc3RydWN0aW9ucyh2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBpbnN0cnVjdGlvbnMgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5pbnN0cnVjdGlvbnMgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgaW5jcmVtZW50IHZhbHVlIGZvciBudW1iZXIgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBzdGVwIHNpemUgd2hlbiBpbmNyZWFzaW5nIG9yIGRlY3JlYXNpbmcgdGhlIG51bWJlci5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGluY3JlbWVudCB2YWx1ZS5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldEluY3JlbWVudChcbiAgICB2YWx1ZTogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWRcbiAgKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGluY3JlbWVudCB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLmluY3JlbWVudCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBzZXBhcmF0b3IgZm9yIGxpc3QgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBjaGFyYWN0ZXIgdXNlZCB0byBzZXBhcmF0ZSBsaXN0IGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgc2VwYXJhdG9yIGNoYXJhY3Rlci5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldFNlcGFyYXRvcihcbiAgICB2YWx1ZTogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWRcbiAgKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIHNlcGFyYXRvciB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLnNlcGFyYXRvciA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBhY3RpdmUgb3B0aW9uIHN0eWxlIGZvciBzZWxlY3QgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBzdHlsZSBhcHBsaWVkIHRvIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgb3B0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgYWN0aXZlIG9wdGlvbiBzdHlsZS5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldEFjdGl2ZSh2YWx1ZTogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgYWN0aXZlIHN0eWxlIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMuYWN0aXZlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGluYWN0aXZlIG9wdGlvbiBzdHlsZSBmb3Igc2VsZWN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgc3R5bGUgYXBwbGllZCB0byBub24tc2VsZWN0ZWQgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGluYWN0aXZlIG9wdGlvbiBzdHlsZS5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldEluYWN0aXZlKHZhbHVlOiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBpbmFjdGl2ZSBzdHlsZSB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLmluYWN0aXZlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGNob2ljZXMgZm9yIHNlbGVjdCwgbXVsdGlzZWxlY3QsIG9yIGF1dG9jb21wbGV0ZSBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIGF2YWlsYWJsZSBvcHRpb25zIHRoYXQgdGhlIHVzZXIgY2FuIHNlbGVjdCBmcm9tIGluIGNob2ljZS1iYXNlZCBwcm9tcHRzLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgYXJyYXkgb2YgY2hvaWNlcyBvciBhIGZ1bmN0aW9uIHRvIGRldGVybWluZSB0aGUgY2hvaWNlcy5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldENob2ljZXMoXG4gICAgdmFsdWU6IENob2ljZVtdIHwgUHJldkNhbGxlcjxSLCBDaG9pY2VbXSB8IEZhbHN5PiB8IHVuZGVmaW5lZFxuICApOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgY2hvaWNlczogJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgdGhpcy5jaG9pY2VzID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGhpbnQgdGV4dCBmb3IgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGhpbnQgdGV4dC5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldEhpbnQodmFsdWU6IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGhpbnQgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5oaW50ID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIHdhcm5pbmcgdGV4dCBmb3IgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyBhIHdhcm5pbmcgbWVzc2FnZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB3YXJuaW5nIHRleHQuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRXYXJuKHZhbHVlOiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyB3YXJuIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMud2FybiA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBzdWdnZXN0aW9uIGZ1bmN0aW9uIGZvciBhdXRvY29tcGxldGUgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIGEgZnVuY3Rpb24gdGhhdCBwcm92aWRlcyBzdWdnZXN0aW9ucyBiYXNlZCBvbiB0aGUgdXNlcidzIGlucHV0IGFuZCBhdmFpbGFibGUgY2hvaWNlcy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gQSBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBjdXJyZW50IGlucHV0IGFuZCBhdmFpbGFibGUgY2hvaWNlcyBhbmQgcmV0dXJucyBhIFByb21pc2UgcmVzb2x2aW5nIHRvIHN1Z2dlc3Rpb25zLlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0U3VnZ2VzdChcbiAgICB2YWx1ZTogKChpbnB1dDogYW55LCBjaG9pY2VzOiBDaG9pY2VbXSkgPT4gUHJvbWlzZTxhbnk+KSB8IHVuZGVmaW5lZFxuICApOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgc3VnZ2VzdCBmdW5jdGlvbmApO1xuICAgIHRoaXMuc3VnZ2VzdCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBsaW1pdCBmb3IgbGlzdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIHNlbGVjdGVkIGluIGxpc3QtdHlwZSBwcm9tcHRzLlxuICAgKiBAdGVtcGxhdGUgUiAtIFRoZSB0eXBlIG9mIHRoZSBwcm9tcHQgbmFtZSwgZXh0ZW5kaW5nIHN0cmluZy5cbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIHNlbGVjdGVkLCBvciBhIGZ1bmN0aW9uIHRvIGRldGVybWluZSB0aGlzIHZhbHVlLlxuICAgKiBAcmV0dXJuIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRMaW1pdCh2YWx1ZTogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgbGltaXQgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5saW1pdCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBtYXNrIGZvciBwYXNzd29yZCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIGNoYXJhY3RlciB1c2VkIHRvIGhpZGUgdGhlIHVzZXIncyBpbnB1dCBpbiBwYXNzd29yZC10eXBlIHByb21wdHMuXG4gICAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHR5cGUgb2YgdGhlIHByb21wdCBuYW1lLCBleHRlbmRpbmcgc3RyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgY2hhcmFjdGVyIHVzZWQgdG8gbWFzayB0aGUgaW5wdXQsIG9yIGEgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHRoaXMgdmFsdWUuXG4gICAqIEByZXR1cm4gVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldE1hc2sodmFsdWU6IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIG1hc2sgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5tYXNrID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIHN0ZG91dCBzdHJlYW0gZm9yIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIG91dHB1dCBzdHJlYW0gdXNlZCBieSB0aGUgcHJvbXB0IGZvciBkaXNwbGF5aW5nIG1lc3NhZ2VzIGFuZCByZXN1bHRzLlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIGJlIHVzZWQgYXMgc3Rkb3V0LlxuICAgKiBAcmV0dXJuIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRTdGRvdXQodmFsdWU6IFdyaXRhYmxlIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIHN0ZG91dCBzdHJlYW1gKTtcbiAgICB0aGlzLnN0ZG91dCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgc3RkaW4gc3RyZWFtIGZvciB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBpbnB1dCBzdHJlYW0gdXNlZCBieSB0aGUgcHJvbXB0IGZvciByZWNlaXZpbmcgdXNlciBpbnB1dC5cbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBiZSB1c2VkIGFzIHN0ZGluLlxuICAgKiBAcmV0dXJuIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRTdGRpbih2YWx1ZTogUmVhZGFibGUgfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICB0aGlzLnN0ZGluID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFza3MgdGhlIHVzZXIgZm9yIGlucHV0IGJhc2VkIG9uIHRoZSBjdXJyZW50IFVzZXJJbnB1dCBjb25maWd1cmF0aW9uLlxuICAgKiBAc3VtbWFyeSBQcm9tcHRzIHRoZSB1c2VyIGFuZCByZXR1cm5zIHRoZWlyIHJlc3BvbnNlIGFzIGEgc2luZ2xlIHZhbHVlLlxuICAgKiBAdGVtcGxhdGUgUiAtIFRoZSB0eXBlIG9mIHRoZSBwcm9tcHQgbmFtZSwgZXh0ZW5kaW5nIHN0cmluZy5cbiAgICogQHJldHVybiBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgdXNlcidzIGFuc3dlci5cbiAgICovXG4gIGFzeW5jIGFzaygpIHtcbiAgICByZXR1cm4gKGF3YWl0IFVzZXJJbnB1dC5hc2sodGhpcykpW3RoaXMubmFtZSBhcyBrZXlvZiBBbnN3ZXJzPFI+XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXNrcyB0aGUgdXNlciBvbmUgb3IgbW9yZSBxdWVzdGlvbnMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIFVzZXJJbnB1dCBjb25maWd1cmF0aW9ucy5cbiAgICogQHN1bW1hcnkgUHJvbXB0cyB0aGUgdXNlciB3aXRoIG9uZSBvciBtb3JlIHF1ZXN0aW9ucyBhbmQgcmV0dXJucyB0aGVpciBhbnN3ZXJzIGFzIGFuIG9iamVjdC5cbiAgICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgcHJvbXB0IG5hbWUsIGV4dGVuZGluZyBzdHJpbmcuXG4gICAqIEBwYXJhbSBxdWVzdGlvbiAtIEEgc2luZ2xlIFVzZXJJbnB1dCBpbnN0YW5jZSBvciBhbiBhcnJheSBvZiBVc2VySW5wdXQgaW5zdGFuY2VzLlxuICAgKiBAcmV0dXJuIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSB1c2VyJ3MgYW5zd2Vycy5cbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgVSBhcyBVc2VyXG4gICAqICAgcGFydGljaXBhbnQgQSBhcyBhc2sgbWV0aG9kXG4gICAqICAgcGFydGljaXBhbnQgUCBhcyBwcm9tcHRzIGxpYnJhcnlcbiAgICogICBBLT4+UDogQ2FsbCBwcm9tcHRzIHdpdGggcXVlc3Rpb24ocylcbiAgICogICBQLT4+VTogRGlzcGxheSBwcm9tcHQocylcbiAgICogICBVLT4+UDogUHJvdmlkZSBpbnB1dFxuICAgKiAgIFAtPj5BOiBSZXR1cm4gYW5zd2Vyc1xuICAgKiAgIEEtPj5BOiBQcm9jZXNzIGFuc3dlcnNcbiAgICogICBBLS0+PkNhbGxlcjogUmV0dXJuIHByb2Nlc3NlZCBhbnN3ZXJzXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgYXNrPFIgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+KFxuICAgIHF1ZXN0aW9uOiBVc2VySW5wdXQ8Uj4gfCBVc2VySW5wdXQ8Uj5bXVxuICApIHtcbiAgICBjb25zdCBsb2cgPSBVc2VySW5wdXQubG9nZ2VyLmZvcih0aGlzLmFzayk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHF1ZXN0aW9uKSkge1xuICAgICAgcXVlc3Rpb24gPSBbcXVlc3Rpb25dO1xuICAgIH1cbiAgICBsZXQgYW5zd2VyczogQW5zd2VyczxSPjtcbiAgICB0cnkge1xuICAgICAgbG9nLnZlcmJvc2UoXG4gICAgICAgIGBBc2tpbmcgcXVlc3Rpb25zOiAke3F1ZXN0aW9uLm1hcCgocSkgPT4gcS5uYW1lKS5qb2luKFwiLCBcIil9YFxuICAgICAgKTtcbiAgICAgIGFuc3dlcnMgPSBhd2FpdCBwcm9tcHRzKHF1ZXN0aW9uKTtcbiAgICAgIGxvZy52ZXJib3NlKGBSZWNlaXZlZCBhbnN3ZXJzOiAke0pTT04uc3RyaW5naWZ5KGFuc3dlcnMsIG51bGwsIDIpfWApO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHdoaWxlIGdldHRpbmcgaW5wdXQ6ICR7ZXJyb3J9YCk7XG4gICAgfVxuICAgIHJldHVybiBhbnN3ZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBc2tzIHRoZSB1c2VyIGZvciBhIG51bWJlciBpbnB1dC5cbiAgICogQHN1bW1hcnkgUHJvbXB0cyB0aGUgdXNlciB0byBlbnRlciBhIG51bWJlciwgd2l0aCBvcHRpb25hbCBtaW5pbXVtLCBtYXhpbXVtLCBhbmQgaW5pdGlhbCB2YWx1ZXMuXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb21wdCwgdXNlZCBhcyB0aGUga2V5IGluIHRoZSByZXR1cm5lZCBhbnN3ZXJzIG9iamVjdC5cbiAgICogQHBhcmFtIHF1ZXN0aW9uIC0gVGhlIG1lc3NhZ2UgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgKiBAcGFyYW0gbWluIC0gVGhlIG1pbmltdW0gYWxsb3dlZCB2YWx1ZSAob3B0aW9uYWwpLlxuICAgKiBAcGFyYW0gbWF4IC0gVGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZSAob3B0aW9uYWwpLlxuICAgKiBAcGFyYW0gaW5pdGlhbCAtIFRoZSBpbml0aWFsIHZhbHVlIHByZXNlbnRlZCB0byB0aGUgdXNlciAob3B0aW9uYWwpLlxuICAgKiBAcmV0dXJuIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBudW1iZXIgZW50ZXJlZCBieSB0aGUgdXNlci5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBhc2tOdW1iZXIoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHF1ZXN0aW9uOiBzdHJpbmcsXG4gICAgbWluPzogbnVtYmVyLFxuICAgIG1heD86IG51bWJlcixcbiAgICBpbml0aWFsPzogbnVtYmVyXG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgbG9nID0gVXNlcklucHV0LmxvZ2dlci5mb3IodGhpcy5hc2tOdW1iZXIpO1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYEFza2luZyBudW1iZXIgaW5wdXQ6IHVuZGVmaW5lZCwgcXVlc3Rpb246ICR7cXVlc3Rpb259LCBtaW46ICR7bWlufSwgbWF4OiAke21heH0sIGluaXRpYWw6ICR7aW5pdGlhbH1gXG4gICAgKTtcbiAgICBjb25zdCB1c2VySW5wdXQgPSBuZXcgVXNlcklucHV0KG5hbWUpXG4gICAgICAuc2V0TWVzc2FnZShxdWVzdGlvbilcbiAgICAgIC5zZXRUeXBlKFwibnVtYmVyXCIpO1xuXG4gICAgaWYgKHR5cGVvZiBtaW4gPT09IFwibnVtYmVyXCIpIHVzZXJJbnB1dC5zZXRNaW4obWluKTtcblxuICAgIGlmICh0eXBlb2YgbWF4ID09PSBcIm51bWJlclwiKSB1c2VySW5wdXQuc2V0TWF4KG1heCk7XG5cbiAgICBpZiAodHlwZW9mIGluaXRpYWwgPT09IFwibnVtYmVyXCIpIHVzZXJJbnB1dC5zZXRJbml0aWFsKGluaXRpYWwpO1xuXG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmFzayh1c2VySW5wdXQpKVtuYW1lXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXNrcyB0aGUgdXNlciBmb3IgYSB0ZXh0IGlucHV0LlxuICAgKiBAc3VtbWFyeSBQcm9tcHRzIHRoZSB1c2VyIHRvIGVudGVyIHRleHQsIHdpdGggb3B0aW9uYWwgbWFza2luZyBhbmQgaW5pdGlhbCB2YWx1ZS5cbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvbXB0LCB1c2VkIGFzIHRoZSBrZXkgaW4gdGhlIHJldHVybmVkIGFuc3dlcnMgb2JqZWN0LlxuICAgKiBAcGFyYW0gcXVlc3Rpb24gLSBUaGUgbWVzc2FnZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuXG4gICAqIEBwYXJhbSBtYXNrIC0gVGhlIGNoYXJhY3RlciB1c2VkIHRvIG1hc2sgdGhlIGlucHV0IChvcHRpb25hbCwgZm9yIHBhc3N3b3JkLWxpa2UgaW5wdXRzKS5cbiAgICogQHBhcmFtIGluaXRpYWwgLSBUaGUgaW5pdGlhbCB2YWx1ZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgKG9wdGlvbmFsKS5cbiAgICogQHJldHVybiBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgdGV4dCBlbnRlcmVkIGJ5IHRoZSB1c2VyLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGFza1RleHQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHF1ZXN0aW9uOiBzdHJpbmcsXG4gICAgbWFzazogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICAgIGluaXRpYWw/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBsb2cgPSBVc2VySW5wdXQubG9nZ2VyLmZvcih0aGlzLmFza1RleHQpO1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYEFza2luZyB0ZXh0IGlucHV0OiB1bmRlZmluZWQsIHF1ZXN0aW9uOiAke3F1ZXN0aW9ufSwgbWFzazogJHttYXNrfSwgaW5pdGlhbDogJHtpbml0aWFsfWBcbiAgICApO1xuICAgIGNvbnN0IHVzZXJJbnB1dCA9IG5ldyBVc2VySW5wdXQobmFtZSkuc2V0TWVzc2FnZShxdWVzdGlvbik7XG5cbiAgICBpZiAobWFzaykgdXNlcklucHV0LnNldE1hc2sobWFzayk7XG4gICAgaWYgKHR5cGVvZiBpbml0aWFsID09PSBcInN0cmluZ1wiKSB1c2VySW5wdXQuc2V0SW5pdGlhbChpbml0aWFsKTtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuYXNrKHVzZXJJbnB1dCkpW25hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBc2tzIHRoZSB1c2VyIGZvciBhIGNvbmZpcm1hdGlvbiAoeWVzL25vKS5cbiAgICogQHN1bW1hcnkgUHJvbXB0cyB0aGUgdXNlciB3aXRoIGEgeWVzL25vIHF1ZXN0aW9uIGFuZCByZXR1cm5zIGEgYm9vbGVhbiByZXN1bHQuXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb21wdCwgdXNlZCBhcyB0aGUga2V5IGluIHRoZSByZXR1cm5lZCBhbnN3ZXJzIG9iamVjdC5cbiAgICogQHBhcmFtIHF1ZXN0aW9uIC0gVGhlIG1lc3NhZ2UgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgKiBAcGFyYW0gaW5pdGlhbCAtIFRoZSBpbml0aWFsIHZhbHVlIHByZXNlbnRlZCB0byB0aGUgdXNlciAob3B0aW9uYWwpLlxuICAgKiBAcmV0dXJuIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHVzZXIncyBhbnN3ZXIuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgYXNrQ29uZmlybWF0aW9uKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBxdWVzdGlvbjogc3RyaW5nLFxuICAgIGluaXRpYWw/OiBib29sZWFuXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvZyA9IFVzZXJJbnB1dC5sb2dnZXIuZm9yKHRoaXMuYXNrQ29uZmlybWF0aW9uKTtcbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBBc2tpbmcgY29uZmlybWF0aW9uIGlucHV0OiB1bmRlZmluZWQsIHF1ZXN0aW9uOiAke3F1ZXN0aW9ufSwgaW5pdGlhbDogJHtpbml0aWFsfWBcbiAgICApO1xuICAgIGNvbnN0IHVzZXJJbnB1dCA9IG5ldyBVc2VySW5wdXQobmFtZSlcbiAgICAgIC5zZXRNZXNzYWdlKHF1ZXN0aW9uKVxuICAgICAgLnNldFR5cGUoXCJjb25maXJtXCIpO1xuXG4gICAgaWYgKHR5cGVvZiBpbml0aWFsICE9PSBcInVuZGVmaW5lZFwiKSB1c2VySW5wdXQuc2V0SW5pdGlhbChpbml0aWFsKTtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuYXNrKHVzZXJJbnB1dCkpW25hbWVdO1xuICB9XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVwZWF0ZWRseSBhc2tzIGZvciBpbnB1dCB1bnRpbCBhIHZhbGlkIHJlc3BvbnNlIGlzIGdpdmVuIG9yIHRoZSBsaW1pdCBpcyByZWFjaGVkLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBpbnNpc3RzIG9uIGdldHRpbmcgYSB2YWxpZCBpbnB1dCBmcm9tIHRoZSB1c2VyLCBhbGxvd2luZyBmb3IgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIGF0dGVtcHRzLlxuICAgKlxuICAgKiBAdGVtcGxhdGUgUiAtIFRoZSB0eXBlIG9mIHRoZSBleHBlY3RlZCByZXN1bHQuXG4gICAqIEBwYXJhbSBpbnB1dCAtIFRoZSBVc2VySW5wdXQgaW5zdGFuY2UgdG8gdXNlIGZvciBwcm9tcHRpbmcuXG4gICAqIEBwYXJhbSB0ZXN0IC0gQSBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGUgdXNlcidzIGlucHV0LlxuICAgKiBAcGFyYW0gZGVmYXVsdENvbmZpcm1hdGlvbiAtIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgY29uZmlybWF0aW9uIHByb21wdCAodHJ1ZSBmb3IgeWVzLCBmYWxzZSBmb3Igbm8pLlxuICAgKiBAcGFyYW0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXR0ZW1wdHMgYWxsb3dlZCAoZGVmYXVsdCBpcyAxKS5cbiAgICogQHJldHVybiBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgdmFsaWQgaW5wdXQgb3IgdW5kZWZpbmVkIGlmIHRoZSBsaW1pdCBpcyByZWFjaGVkLlxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAgICogICBwYXJ0aWNpcGFudCBJIGFzIGluc2lzdCBtZXRob2RcbiAgICogICBwYXJ0aWNpcGFudCBBIGFzIGFzayBtZXRob2RcbiAgICogICBwYXJ0aWNpcGFudCBUIGFzIHRlc3QgZnVuY3Rpb25cbiAgICogICBwYXJ0aWNpcGFudCBDIGFzIGFza0NvbmZpcm1hdGlvbiBtZXRob2RcbiAgICogICBsb29wIFVudGlsIHZhbGlkIGlucHV0IG9yIGxpbWl0IHJlYWNoZWRcbiAgICogICAgIEktPj5BOiBDYWxsIGFzayB3aXRoIGlucHV0XG4gICAqICAgICBBLT4+VTogUHJvbXB0IHVzZXJcbiAgICogICAgIFUtPj5BOiBQcm92aWRlIGlucHV0XG4gICAqICAgICBBLT4+STogUmV0dXJuIHJlc3VsdFxuICAgKiAgICAgSS0+PlQ6IFRlc3QgcmVzdWx0XG4gICAqICAgICBhbHQgVGVzdCBwYXNzZXNcbiAgICogICAgICAgSS0+PkM6IEFzayBmb3IgY29uZmlybWF0aW9uXG4gICAqICAgICAgIEMtPj5VOiBDb25maXJtIGlucHV0XG4gICAqICAgICAgIFUtPj5DOiBQcm92aWRlIGNvbmZpcm1hdGlvblxuICAgKiAgICAgICBDLT4+STogUmV0dXJuIGNvbmZpcm1hdGlvblxuICAgKiAgICAgICBhbHQgQ29uZmlybWVkXG4gICAqICAgICAgICAgSS0tPj5DYWxsZXI6IFJldHVybiB2YWxpZCByZXN1bHRcbiAgICogICAgICAgZWxzZSBOb3QgY29uZmlybWVkXG4gICAqICAgICAgICAgSS0+Pkk6IENvbnRpbnVlIGxvb3BcbiAgICogICAgICAgZW5kXG4gICAqICAgICBlbHNlIFRlc3QgZmFpbHNcbiAgICogICAgICAgSS0+Pkk6IENvbnRpbnVlIGxvb3BcbiAgICogICAgIGVuZFxuICAgKiAgIGVuZFxuICAgKiAgIEktLT4+Q2FsbGVyOiBSZXR1cm4gdW5kZWZpbmVkIGlmIGxpbWl0IHJlYWNoZWRcbiAgICovXG4gIHN0YXRpYyBhc3luYyBpbnNpc3Q8Uj4oXG4gICAgaW5wdXQ6IFVzZXJJbnB1dCxcbiAgICB0ZXN0OiAocmVzOiBzdHJpbmcgfCBudW1iZXIpID0+IGJvb2xlYW4sXG4gICAgZGVmYXVsdENvbmZpcm1hdGlvbjogYm9vbGVhbixcbiAgICBsaW1pdCA9IDFcbiAgKTogUHJvbWlzZTxSIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgbG9nID0gVXNlcklucHV0LmxvZ2dlci5mb3IodGhpcy5pbnNpc3QpO1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYEluc2lzdGluZyBvbiBpbnB1dDogJHtpbnB1dC5uYW1lfSwgdGVzdDogJHt0ZXN0LnRvU3RyaW5nKCl9LCBkZWZhdWx0Q29uZmlybWF0aW9uOiAke2RlZmF1bHRDb25maXJtYXRpb259LCBsaW1pdDogJHtsaW1pdH1gXG4gICAgKTtcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICBsZXQgY29uZmlybWF0aW9uOiBib29sZWFuO1xuICAgIHRyeSB7XG4gICAgICBkbyB7XG4gICAgICAgIHJlc3VsdCA9IChhd2FpdCBVc2VySW5wdXQuYXNrKGlucHV0KSlbXG4gICAgICAgICAgaW5wdXQubmFtZSBhcyBrZXlvZiBBbnN3ZXJzPHN0cmluZz5cbiAgICAgICAgXSBhcyBzdHJpbmc7XG4gICAgICAgIGlmICghdGVzdChyZXN1bHQpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbmZpcm1hdGlvbiA9IGF3YWl0IFVzZXJJbnB1dC5hc2tDb25maXJtYXRpb24oXG4gICAgICAgICAgYCR7aW5wdXQubmFtZX0tY29uZmlybWAsXG4gICAgICAgICAgYElzIHRoZSAke2lucHV0LnR5cGV9IGNvcnJlY3Q/YCxcbiAgICAgICAgICBkZWZhdWx0Q29uZmlybWF0aW9uXG4gICAgICAgICk7XG4gICAgICAgIGlmICghY29uZmlybWF0aW9uKSByZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICB9IHdoaWxlICh0eXBlb2YgcmVzdWx0ID09PSBcInVuZGVmaW5lZFwiICYmIGxpbWl0ID4gMSAmJiBjb3VudCsrIDwgbGltaXQpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIGxvZy5lcnJvcihgRXJyb3Igd2hpbGUgaW5zaXN0aW5nOiAke2V9YCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSBcInVuZGVmaW5lZFwiKSBsb2cuaW5mbyhcIm5vIHNlbGVjdGlvbi4uLlwiKTtcbiAgICByZXR1cm4gcmVzdWx0IGFzIFIgfCB1bmRlZmluZWQ7XG4gIH1cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXBlYXRlZGx5IGFza3MgZm9yIHRleHQgaW5wdXQgdW50aWwgYSB2YWxpZCByZXNwb25zZSBpcyBnaXZlbiBvciB0aGUgbGltaXQgaXMgcmVhY2hlZC5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgaW5zaXN0cyBvbiBnZXR0aW5nIGEgdmFsaWQgdGV4dCBpbnB1dCBmcm9tIHRoZSB1c2VyLCBhbGxvd2luZyBmb3IgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIGF0dGVtcHRzLlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9tcHQsIHVzZWQgYXMgdGhlIGtleSBpbiB0aGUgcmV0dXJuZWQgYW5zd2VycyBvYmplY3QuXG4gICAqIEBwYXJhbSBxdWVzdGlvbiAtIFRoZSBtZXNzYWdlIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICogQHBhcmFtIHRlc3QgLSBBIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSB1c2VyJ3MgaW5wdXQuXG4gICAqIEBwYXJhbSBtYXNrIC0gVGhlIGNoYXJhY3RlciB1c2VkIHRvIG1hc2sgdGhlIGlucHV0IChvcHRpb25hbCwgZm9yIHBhc3N3b3JkLWxpa2UgaW5wdXRzKS5cbiAgICogQHBhcmFtIGluaXRpYWwgLSBUaGUgaW5pdGlhbCB2YWx1ZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIGRlZmF1bHRDb25maXJtYXRpb24gLSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvbmZpcm1hdGlvbiBwcm9tcHQgKHRydWUgZm9yIHllcywgZmFsc2UgZm9yIG5vKS5cbiAgICogQHBhcmFtIGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGF0dGVtcHRzIGFsbG93ZWQgKGRlZmF1bHQgaXMgLTEsIG1lYW5pbmcgdW5saW1pdGVkKS5cbiAgICogQHJldHVybiBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgdmFsaWQgaW5wdXQgb3IgdW5kZWZpbmVkIGlmIHRoZSBsaW1pdCBpcyByZWFjaGVkLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGluc2lzdEZvclRleHQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHF1ZXN0aW9uOiBzdHJpbmcsXG4gICAgdGVzdDogKHJlczogc3RyaW5nKSA9PiBib29sZWFuLFxuICAgIG1hc2s6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbiAgICBpbml0aWFsPzogc3RyaW5nLFxuICAgIGRlZmF1bHRDb25maXJtYXRpb24gPSBmYWxzZSxcbiAgICBsaW1pdCA9IC0xXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgbG9nID0gVXNlcklucHV0LmxvZ2dlci5mb3IodGhpcy5pbnNpc3RGb3JUZXh0KTtcbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBJbnNpc3RpbmcgZm9yIHRleHQgaW5wdXQ6IHVuZGVmaW5lZCwgcXVlc3Rpb246ICR7cXVlc3Rpb259LCB0ZXN0OiAke3Rlc3QudG9TdHJpbmcoKX0sIG1hc2s6ICR7bWFza30sIGluaXRpYWw6ICR7aW5pdGlhbH0sIGRlZmF1bHRDb25maXJtYXRpb246ICR7ZGVmYXVsdENvbmZpcm1hdGlvbn0sIGxpbWl0OiAke2xpbWl0fWBcbiAgICApO1xuICAgIGNvbnN0IHVzZXJJbnB1dCA9IG5ldyBVc2VySW5wdXQobmFtZSkuc2V0TWVzc2FnZShxdWVzdGlvbik7XG5cbiAgICBpZiAobWFzaykgdXNlcklucHV0LnNldE1hc2sobWFzayk7XG4gICAgaWYgKHR5cGVvZiBpbml0aWFsID09PSBcInN0cmluZ1wiKSB1c2VySW5wdXQuc2V0SW5pdGlhbChpbml0aWFsKTtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaW5zaXN0KFxuICAgICAgdXNlcklucHV0LFxuICAgICAgdGVzdCBhcyAocmVzOiBzdHJpbmcgfCBudW1iZXIpID0+IGJvb2xlYW4sXG4gICAgICBkZWZhdWx0Q29uZmlybWF0aW9uLFxuICAgICAgbGltaXRcbiAgICApKSBhcyBzdHJpbmc7XG4gIH1cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXBlYXRlZGx5IGFza3MgZm9yIG51bWJlciBpbnB1dCB1bnRpbCBhIHZhbGlkIHJlc3BvbnNlIGlzIGdpdmVuIG9yIHRoZSBsaW1pdCBpcyByZWFjaGVkLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBpbnNpc3RzIG9uIGdldHRpbmcgYSB2YWxpZCBudW1iZXIgaW5wdXQgZnJvbSB0aGUgdXNlciwgYWxsb3dpbmcgZm9yIGEgc3BlY2lmaWVkIG51bWJlciBvZiBhdHRlbXB0cy5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvbXB0LCB1c2VkIGFzIHRoZSBrZXkgaW4gdGhlIHJldHVybmVkIGFuc3dlcnMgb2JqZWN0LlxuICAgKiBAcGFyYW0gcXVlc3Rpb24gLSBUaGUgbWVzc2FnZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuXG4gICAqIEBwYXJhbSB0ZXN0IC0gQSBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGUgdXNlcidzIGlucHV0LlxuICAgKiBAcGFyYW0gbWluIC0gVGhlIG1pbmltdW0gYWxsb3dlZCB2YWx1ZSAob3B0aW9uYWwpLlxuICAgKiBAcGFyYW0gbWF4IC0gVGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZSAob3B0aW9uYWwpLlxuICAgKiBAcGFyYW0gaW5pdGlhbCAtIFRoZSBpbml0aWFsIHZhbHVlIHByZXNlbnRlZCB0byB0aGUgdXNlciAob3B0aW9uYWwpLlxuICAgKiBAcGFyYW0gZGVmYXVsdENvbmZpcm1hdGlvbiAtIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgY29uZmlybWF0aW9uIHByb21wdCAodHJ1ZSBmb3IgeWVzLCBmYWxzZSBmb3Igbm8pLlxuICAgKiBAcGFyYW0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXR0ZW1wdHMgYWxsb3dlZCAoZGVmYXVsdCBpcyAtMSwgbWVhbmluZyB1bmxpbWl0ZWQpLlxuICAgKiBAcmV0dXJuIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSB2YWxpZCBpbnB1dCBvciB1bmRlZmluZWQgaWYgdGhlIGxpbWl0IGlzIHJlYWNoZWQuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgaW5zaXN0Rm9yTnVtYmVyKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBxdWVzdGlvbjogc3RyaW5nLFxuICAgIHRlc3Q6IChyZXM6IG51bWJlcikgPT4gYm9vbGVhbixcbiAgICBtaW4/OiBudW1iZXIsXG4gICAgbWF4PzogbnVtYmVyLFxuICAgIGluaXRpYWw/OiBudW1iZXIsXG4gICAgZGVmYXVsdENvbmZpcm1hdGlvbiA9IGZhbHNlLFxuICAgIGxpbWl0ID0gLTFcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBsb2cgPSBVc2VySW5wdXQubG9nZ2VyLmZvcih0aGlzLmluc2lzdEZvck51bWJlcik7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgSW5zaXN0aW5nIGZvciBudW1iZXIgaW5wdXQ6IHVuZGVmaW5lZCwgcXVlc3Rpb246ICR7cXVlc3Rpb259LCB0ZXN0OiAke3Rlc3QudG9TdHJpbmcoKX0sIG1pbjogJHttaW59LCBtYXg6ICR7bWF4fSwgaW5pdGlhbDogJHtpbml0aWFsfSwgZGVmYXVsdENvbmZpcm1hdGlvbjogJHtkZWZhdWx0Q29uZmlybWF0aW9ufSwgbGltaXQ6ICR7bGltaXR9YFxuICAgICk7XG4gICAgY29uc3QgdXNlcklucHV0ID0gbmV3IFVzZXJJbnB1dChuYW1lKVxuICAgICAgLnNldE1lc3NhZ2UocXVlc3Rpb24pXG4gICAgICAuc2V0VHlwZShcIm51bWJlclwiKTtcblxuICAgIGlmICh0eXBlb2YgbWluID09PSBcIm51bWJlclwiKSB1c2VySW5wdXQuc2V0TWluKG1pbik7XG5cbiAgICBpZiAodHlwZW9mIG1heCA9PT0gXCJudW1iZXJcIikgdXNlcklucHV0LnNldE1heChtYXgpO1xuXG4gICAgaWYgKHR5cGVvZiBpbml0aWFsID09PSBcIm51bWJlclwiKSB1c2VySW5wdXQuc2V0SW5pdGlhbChpbml0aWFsKTtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaW5zaXN0KFxuICAgICAgdXNlcklucHV0LFxuICAgICAgdGVzdCBhcyAocmVzOiBzdHJpbmcgfCBudW1iZXIpID0+IGJvb2xlYW4sXG4gICAgICBkZWZhdWx0Q29uZmlybWF0aW9uLFxuICAgICAgbGltaXRcbiAgICApKSBhcyBudW1iZXI7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFBhcnNlcyBjb21tYW5kLWxpbmUgYXJndW1lbnRzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBvcHRpb25zLlxuICAgKiBAc3VtbWFyeSBVc2VzIE5vZGUuanMncyB1dGlsLnBhcnNlQXJncyB0byBwYXJzZSBjb21tYW5kLWxpbmUgYXJndW1lbnRzIGFuZCByZXR1cm4gdGhlIHJlc3VsdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHBhcnNpbmcgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBwYXJzZWQgYXJndW1lbnRzLlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDIGFzIENhbGxlclxuICAgKiAgIHBhcnRpY2lwYW50IFAgYXMgcGFyc2VBcmdzIG1ldGhvZFxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgdXRpbC5wYXJzZUFyZ3NcbiAgICogICBDLT4+UDogQ2FsbCB3aXRoIG9wdGlvbnNcbiAgICogICBQLT4+UDogUHJlcGFyZSBhcmdzIG9iamVjdFxuICAgKiAgIFAtPj5VOiBDYWxsIHBhcnNlQXJncyB3aXRoIHByZXBhcmVkIGFyZ3NcbiAgICogICBVLT4+UDogUmV0dXJuIHBhcnNlZCByZXN1bHRcbiAgICogICBQLS0+PkM6IFJldHVybiBQYXJzZUFyZ3NSZXN1bHRcbiAgICovXG4gIHN0YXRpYyBwYXJzZUFyZ3Mob3B0aW9uczogUGFyc2VBcmdzT3B0aW9uc0NvbmZpZyk6IFBhcnNlQXJnc1Jlc3VsdCB7XG4gICAgY29uc3QgbG9nID0gVXNlcklucHV0LmxvZ2dlci5mb3IodGhpcy5wYXJzZUFyZ3MpO1xuICAgIGNvbnN0IGFyZ3M6IFBhcnNlQXJnc0NvbmZpZyA9IHtcbiAgICAgIGFyZ3M6IHByb2Nlc3MuYXJndi5zbGljZSgyKSxcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgfTtcbiAgICBsb2cuZGVidWcoYFBhcnNpbmcgYXJndW1lbnRzOiAke0pTT04uc3RyaW5naWZ5KGFyZ3MsIG51bGwsIDIpfWApO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcGFyc2VBcmdzKGFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBsb2cuZGVidWcoXG4gICAgICAgIGBFcnJvciB3aGlsZSBwYXJzaW5nIGFyZ3VtZW50czpcXG4ke0pTT04uc3RyaW5naWZ5KGFyZ3MsIG51bGwsIDIpfVxcbiB8IG9wdGlvbnNcXG4ke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMsIG51bGwsIDIpfVxcbiB8ICR7ZXJyb3J9YFxuICAgICAgKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgcGFyc2luZyBhcmd1bWVudHM6ICR7ZXJyb3J9YCk7XG4gICAgfVxuICB9XG59XG4iLCIvKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZhdWx0IGNvbW1hbmQgb3B0aW9ucyBmb3IgQ0xJIGNvbW1hbmRzLlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgc3RydWN0dXJlIGFuZCBkZWZhdWx0IHZhbHVlcyBmb3IgY29tbW9uIGNvbW1hbmQtbGluZSBvcHRpb25zIHVzZWQgYWNyb3NzIHZhcmlvdXMgQ0xJIGNvbW1hbmRzLlxuICogQGNvbnN0IERlZmF1bHRDb21tYW5kT3B0aW9uc1xuICogQHR5cGVkZWYge09iamVjdH0gRGVmYXVsdENvbW1hbmRPcHRpb25zXG4gKiBAcHJvcGVydHkge09iamVjdH0gdmVyYm9zZSAtIFZlcmJvc2l0eSBsZXZlbCBvcHRpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmVyYm9zZS50eXBlIC0gVGhlIHR5cGUgb2YgdGhlIHZlcmJvc2Ugb3B0aW9uIChudW1iZXIpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZlcmJvc2Uuc2hvcnQgLSBUaGUgc2hvcnQgZmxhZyBmb3IgdGhlIHZlcmJvc2Ugb3B0aW9uIChWKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB2ZXJib3NlLmRlZmF1bHQgLSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdmVyYm9zaXR5ICgwKS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB2ZXJzaW9uIC0gVmVyc2lvbiBkaXNwbGF5IG9wdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2ZXJzaW9uLnR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgdmVyc2lvbiBvcHRpb24gKGJvb2xlYW4pLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZlcnNpb24uc2hvcnQgLSBUaGUgc2hvcnQgZmxhZyBmb3IgdGhlIHZlcnNpb24gb3B0aW9uICh2KS5cbiAqIEBwcm9wZXJ0eSB7dW5kZWZpbmVkfSB2ZXJzaW9uLmRlZmF1bHQgLSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdmVyc2lvbiBkaXNwbGF5ICh1bmRlZmluZWQpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGhlbHAgLSBIZWxwIGRpc3BsYXkgb3B0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGhlbHAudHlwZSAtIFRoZSB0eXBlIG9mIHRoZSBoZWxwIG9wdGlvbiAoYm9vbGVhbikuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaGVscC5zaG9ydCAtIFRoZSBzaG9ydCBmbGFnIGZvciB0aGUgaGVscCBvcHRpb24gKGgpLlxuICogQHByb3BlcnR5IHtib29sZWFufSBoZWxwLmRlZmF1bHQgLSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgaGVscCBkaXNwbGF5IChmYWxzZSkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbG9nTGV2ZWwgLSBMb2cgbGV2ZWwgb3B0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxvZ0xldmVsLnR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgbG9nTGV2ZWwgb3B0aW9uIChzdHJpbmcpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxvZ0xldmVsLmRlZmF1bHQgLSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgbG9nIGxldmVsIChcImluZm9cIikuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbG9nU3R5bGUgLSBMb2cgc3R5bGluZyBvcHRpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbG9nU3R5bGUudHlwZSAtIFRoZSB0eXBlIG9mIHRoZSBsb2dTdHlsZSBvcHRpb24gKGJvb2xlYW4pLlxuICogQHByb3BlcnR5IHtib29sZWFufSBsb2dTdHlsZS5kZWZhdWx0IC0gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGxvZyBzdHlsaW5nICh0cnVlKS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0aW1lc3RhbXAgLSBUaW1lc3RhbXAgZGlzcGxheSBvcHRpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGltZXN0YW1wLnR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgdGltZXN0YW1wIG9wdGlvbiAoYm9vbGVhbikuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHRpbWVzdGFtcC5kZWZhdWx0IC0gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRpbWVzdGFtcCBkaXNwbGF5ICh0cnVlKS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBiYW5uZXIgLSBCYW5uZXIgZGlzcGxheSBvcHRpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYmFubmVyLnR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgYmFubmVyIG9wdGlvbiAoYm9vbGVhbikuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGJhbm5lci5kZWZhdWx0IC0gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGJhbm5lciBkaXNwbGF5IChmYWxzZSkuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBjb25zdCBEZWZhdWx0Q29tbWFuZE9wdGlvbnMgPSB7XG4gIHZlcmJvc2U6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBzaG9ydDogXCJWXCIsXG4gICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICB9LFxuICB2ZXJzaW9uOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgc2hvcnQ6IFwidlwiLFxuICAgIGRlZmF1bHQ6IHVuZGVmaW5lZCxcbiAgfSxcbiAgaGVscDoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIHNob3J0OiBcImhcIixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgbG9nTGV2ZWw6IHtcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIGRlZmF1bHQ6IFwiaW5mb1wiLFxuICB9LFxuICBsb2dTdHlsZToge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIHRpbWVzdGFtcDoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIGJhbm5lcjoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZhdWx0IGNvbW1hbmQgdmFsdWVzIGRlcml2ZWQgZnJvbSBEZWZhdWx0Q29tbWFuZE9wdGlvbnMuXG4gKiBAc3VtbWFyeSBDcmVhdGVzIGFuIG9iamVjdCB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlcyBvZiBhbGwgb3B0aW9ucyBkZWZpbmVkIGluIERlZmF1bHRDb21tYW5kT3B0aW9ucy5cbiAqIEBjb25zdCBEZWZhdWx0Q29tbWFuZFZhbHVlc1xuICogQHR5cGVkZWYge09iamVjdH0gRGVmYXVsdENvbW1hbmRWYWx1ZXNcbiAqIEBwcm9wZXJ0eSB7dW5rbm93bn0gW2tleTogc3RyaW5nXSAtIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBlYWNoIG9wdGlvbiBpbiBEZWZhdWx0Q29tbWFuZE9wdGlvbnMuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBjb25zdCBEZWZhdWx0Q29tbWFuZFZhbHVlczoge1xuICBbayBpbiBrZXlvZiB0eXBlb2YgRGVmYXVsdENvbW1hbmRPcHRpb25zXTogdW5rbm93bjtcbn0gPSBPYmplY3Qua2V5cyhEZWZhdWx0Q29tbWFuZE9wdGlvbnMpLnJlZHVjZShcbiAgKGFjYzogUmVjb3JkPGtleW9mIHR5cGVvZiBEZWZhdWx0Q29tbWFuZE9wdGlvbnMsIHVua25vd24+LCBrZXk6IHN0cmluZykgPT4ge1xuICAgIGFjY1trZXkgYXMga2V5b2YgdHlwZW9mIERlZmF1bHRDb21tYW5kT3B0aW9uc10gPVxuICAgICAgRGVmYXVsdENvbW1hbmRPcHRpb25zW2tleSBhcyBrZXlvZiB0eXBlb2YgRGVmYXVsdENvbW1hbmRPcHRpb25zXS5kZWZhdWx0O1xuICAgIHJldHVybiBhY2M7XG4gIH0sXG4gIHt9IGFzIFJlY29yZDxrZXlvZiB0eXBlb2YgRGVmYXVsdENvbW1hbmRWYWx1ZXMsIHVua25vd24+XG4pO1xuIiwiLyoqXG4gKiBAZGVzY3JpcHRpb24gUGFkcyB0aGUgZW5kIG9mIGEgc3RyaW5nIHdpdGggYSBzcGVjaWZpZWQgY2hhcmFjdGVyLlxuICogQHN1bW1hcnkgRXh0ZW5kcyB0aGUgaW5wdXQgc3RyaW5nIHRvIGEgc3BlY2lmaWVkIGxlbmd0aCBieSBhZGRpbmcgYSBwYWRkaW5nIGNoYXJhY3RlciB0byB0aGUgZW5kLlxuICogSWYgdGhlIGlucHV0IHN0cmluZyBpcyBhbHJlYWR5IGxvbmdlciB0aGFuIHRoZSBzcGVjaWZpZWQgbGVuZ3RoLCBpdCBpcyByZXR1cm5lZCB1bmNoYW5nZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgcGFkZGVkLlxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCAtIFRoZSBkZXNpcmVkIHRvdGFsIGxlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIHN0cmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcj1cIiBcIl0gLSBUaGUgY2hhcmFjdGVyIHRvIHVzZSBmb3IgcGFkZGluZy4gRGVmYXVsdHMgdG8gYSBzcGFjZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHBhZGRlZCBzdHJpbmcuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBhZGRpbmcgY2hhcmFjdGVyIGlzIG5vdCBleGFjdGx5IG9uZSBjaGFyYWN0ZXIgbG9uZy5cbiAqXG4gKiBAZnVuY3Rpb24gcGFkRW5kXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFkRW5kKFxuICBzdHI6IHN0cmluZyxcbiAgbGVuZ3RoOiBudW1iZXIsXG4gIGNoYXI6IHN0cmluZyA9IFwiIFwiXG4pOiBzdHJpbmcge1xuICBpZiAoY2hhci5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBjaGFyYWN0ZXIgbGVuZ3RoIGZvciBwYWRkaW5nLiBtdXN0IGJlIG9uZSFcIik7XG4gIHJldHVybiBzdHIucGFkRW5kKGxlbmd0aCwgY2hhcik7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJlcGxhY2VzIHBsYWNlaG9sZGVycyBpbiBhIHN0cmluZyB3aXRoIHByb3ZpZGVkIHZhbHVlcy5cbiAqIEBzdW1tYXJ5IEludGVycG9sYXRlcyBhIHN0cmluZyBieSByZXBsYWNpbmcgcGxhY2Vob2xkZXJzIG9mIHRoZSBmb3JtICR7dmFyaWFibGVOYW1lfVxuICogd2l0aCBjb3JyZXNwb25kaW5nIHZhbHVlcyBmcm9tIHRoZSBwcm92aWRlZCBvYmplY3QuIElmIGEgcGxhY2Vob2xkZXIgZG9lc24ndCBoYXZlXG4gKiBhIGNvcnJlc3BvbmRpbmcgdmFsdWUsIGl0IGlzIGxlZnQgdW5jaGFuZ2VkIGluIHRoZSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0IC0gVGhlIGlucHV0IHN0cmluZyBjb250YWluaW5nIHBsYWNlaG9sZGVycyB0byBiZSByZXBsYWNlZC5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nPn0gdmFsdWVzIC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcga2V5LXZhbHVlIHBhaXJzIGZvciByZXBsYWNlbWVudC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGludGVycG9sYXRlZCBzdHJpbmcgd2l0aCBwbGFjZWhvbGRlcnMgcmVwbGFjZWQgYnkgdGhlaXIgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gKlxuICogQGZ1bmN0aW9uIHBhdGNoUGxhY2Vob2xkZXJzXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAqICAgcGFydGljaXBhbnQgcGF0Y2hTdHJpbmdcbiAqICAgcGFydGljaXBhbnQgU3RyaW5nLnJlcGxhY2VcbiAqICAgQ2FsbGVyLT4+cGF0Y2hTdHJpbmc6IENhbGwgd2l0aCBpbnB1dCBhbmQgdmFsdWVzXG4gKiAgIHBhdGNoU3RyaW5nLT4+U3RyaW5nLnJlcGxhY2U6IENhbGwgd2l0aCByZWdleCBhbmQgcmVwbGFjZW1lbnQgZnVuY3Rpb25cbiAqICAgU3RyaW5nLnJlcGxhY2UtPj5wYXRjaFN0cmluZzogUmV0dXJuIHJlcGxhY2VkIHN0cmluZ1xuICogICBwYXRjaFN0cmluZy0tPj5DYWxsZXI6IFJldHVybiBwYXRjaGVkIHN0cmluZ1xuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoUGxhY2Vob2xkZXJzKFxuICBpbnB1dDogc3RyaW5nLFxuICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz5cbik6IHN0cmluZyB7XG4gIHJldHVybiBpbnB1dC5yZXBsYWNlKFxuICAgIC9cXCRcXHsoW2EtekEtWjAtOV9dKylcXH0vZyxcbiAgICAobWF0Y2gsIHZhcmlhYmxlKSA9PiAodmFsdWVzW3ZhcmlhYmxlIGFzIHN0cmluZ10gYXMgc3RyaW5nKSB8fCBtYXRjaFxuICApO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXBsYWNlcyBvY2N1cnJlbmNlcyBvZiBrZXlzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyB2YWx1ZXMgaW4gYSBzdHJpbmcuXG4gKiBAc3VtbWFyeSBJdGVyYXRlcyB0aHJvdWdoIGEgc2V0IG9mIGtleS12YWx1ZSBwYWlycyBhbmQgcmVwbGFjZXMgYWxsIG9jY3VycmVuY2VzIG9mIGVhY2gga2V5XG4gKiBpbiB0aGUgaW5wdXQgc3RyaW5nIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgdmFsdWUuIFN1cHBvcnRzIHJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFncyBmb3IgY3VzdG9taXplZCByZXBsYWNlbWVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgLSBUaGUgaW5wdXQgc3RyaW5nIGluIHdoaWNoIHJlcGxhY2VtZW50cyB3aWxsIGJlIG1hZGUuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz59IHZhbHVlcyAtIEFuIG9iamVjdCBjb250YWluaW5nIGtleS12YWx1ZSBwYWlycyBmb3IgcmVwbGFjZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2ZsYWdzPVwiZ1wiXSAtIFJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFncyB0byBjb250cm9sIHRoZSByZXBsYWNlbWVudCBiZWhhdmlvci5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHN0cmluZyB3aXRoIGFsbCBzcGVjaWZpZWQgcmVwbGFjZW1lbnRzIGFwcGxpZWQuXG4gKlxuICogQGZ1bmN0aW9uIHBhdGNoU3RyaW5nXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2hTdHJpbmcoXG4gIGlucHV0OiBzdHJpbmcsXG4gIHZhbHVlczogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nPixcbiAgZmxhZ3M6IHN0cmluZyA9IFwiZ1wiXG4pOiBzdHJpbmcge1xuICBPYmplY3QuZW50cmllcyh2YWx1ZXMpLmZvckVhY2goKFtrZXksIHZhbF0pID0+IHtcbiAgICBjb25zdCByZWdleHAgPSBuZXcgUmVnRXhwKGVzY2FwZVJlZ0V4cChrZXkpLCBmbGFncyk7XG4gICAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKHJlZ2V4cCwgdmFsIGFzIHN0cmluZyk7XG4gIH0pO1xuICByZXR1cm4gaW5wdXQ7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgc3RyaW5nIHRvIGNhbWVsQ2FzZS5cbiAqIEBzdW1tYXJ5IFRyYW5zZm9ybXMgdGhlIGlucHV0IHN0cmluZyBpbnRvIGNhbWVsQ2FzZSBmb3JtYXQsIHdoZXJlIHdvcmRzIGFyZSBqb2luZWQgd2l0aG91dCBzcGFjZXNcbiAqIGFuZCBlYWNoIHdvcmQgYWZ0ZXIgdGhlIGZpcnN0IHN0YXJ0cyB3aXRoIGEgY2FwaXRhbCBsZXR0ZXIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgaW5wdXQgc3RyaW5nIHRvIGJlIGNvbnZlcnRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGlucHV0IHN0cmluZyBjb252ZXJ0ZWQgdG8gY2FtZWxDYXNlLlxuICpcbiAqIEBmdW5jdGlvbiB0b0NhbWVsQ2FzZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ2FtZWxDYXNlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2UoLyg/Ol5cXHd8W0EtWl18XFxiXFx3KS9nLCAod29yZCwgaW5kZXgpID0+XG4gICAgICBpbmRleCA9PT0gMCA/IHdvcmQudG9Mb3dlckNhc2UoKSA6IHdvcmQudG9VcHBlckNhc2UoKVxuICAgIClcbiAgICAucmVwbGFjZSgvXFxzKy9nLCBcIlwiKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29udmVydHMgYSBzdHJpbmcgdG8gRU5WSVJPTk1FTlRfVkFSSUFCTEUgZm9ybWF0LlxuICogQHN1bW1hcnkgVHJhbnNmb3JtcyB0aGUgaW5wdXQgc3RyaW5nIGludG8gdXBwZXJjYXNlIHdpdGggd29yZHMgc2VwYXJhdGVkIGJ5IHVuZGVyc2NvcmVzLFxuICogdHlwaWNhbGx5IHVzZWQgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIGlucHV0IHN0cmluZyB0byBiZSBjb252ZXJ0ZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBpbnB1dCBzdHJpbmcgY29udmVydGVkIHRvIEVOVklST05NRU5UX1ZBUklBQkxFIGZvcm1hdC5cbiAqXG4gKiBAZnVuY3Rpb24gdG9FTlZGb3JtYXRcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0VOVkZvcm1hdCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9TbmFrZUNhc2UodGV4dCkudG9VcHBlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29udmVydHMgYSBzdHJpbmcgdG8gc25ha2VfY2FzZS5cbiAqIEBzdW1tYXJ5IFRyYW5zZm9ybXMgdGhlIGlucHV0IHN0cmluZyBpbnRvIGxvd2VyY2FzZSB3aXRoIHdvcmRzIHNlcGFyYXRlZCBieSB1bmRlcnNjb3Jlcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgY29udmVydGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgaW5wdXQgc3RyaW5nIGNvbnZlcnRlZCB0byBzbmFrZV9jYXNlLlxuICpcbiAqIEBmdW5jdGlvbiB0b1NuYWtlQ2FzZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvU25ha2VDYXNlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIFwiJDFfJDJcIilcbiAgICAucmVwbGFjZSgvW1xccy1dKy9nLCBcIl9cIilcbiAgICAudG9Mb3dlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29udmVydHMgYSBzdHJpbmcgdG8ga2ViYWItY2FzZS5cbiAqIEBzdW1tYXJ5IFRyYW5zZm9ybXMgdGhlIGlucHV0IHN0cmluZyBpbnRvIGxvd2VyY2FzZSB3aXRoIHdvcmRzIHNlcGFyYXRlZCBieSBoeXBoZW5zLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIGlucHV0IHN0cmluZyB0byBiZSBjb252ZXJ0ZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBpbnB1dCBzdHJpbmcgY29udmVydGVkIHRvIGtlYmFiLWNhc2UuXG4gKlxuICogQGZ1bmN0aW9uIHRvS2ViYWJDYXNlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9LZWJhYkNhc2UodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHRcbiAgICAucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgXCIkMS0kMlwiKVxuICAgIC5yZXBsYWNlKC9bXFxzX10rL2csIFwiLVwiKVxuICAgIC50b0xvd2VyQ2FzZSgpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyBhIHN0cmluZyB0byBQYXNjYWxDYXNlLlxuICogQHN1bW1hcnkgVHJhbnNmb3JtcyB0aGUgaW5wdXQgc3RyaW5nIGludG8gUGFzY2FsQ2FzZSBmb3JtYXQsIHdoZXJlIHdvcmRzIGFyZSBqb2luZWQgd2l0aG91dCBzcGFjZXNcbiAqIGFuZCBlYWNoIHdvcmQgc3RhcnRzIHdpdGggYSBjYXBpdGFsIGxldHRlci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgY29udmVydGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgaW5wdXQgc3RyaW5nIGNvbnZlcnRlZCB0byBQYXNjYWxDYXNlLlxuICpcbiAqIEBmdW5jdGlvbiB0b1Bhc2NhbENhc2VcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1Bhc2NhbENhc2UodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHRcbiAgICAucmVwbGFjZSgvKD86Xlxcd3xbQS1aXXxcXGJcXHcpL2csICh3b3JkKSA9PiB3b3JkLnRvVXBwZXJDYXNlKCkpXG4gICAgLnJlcGxhY2UoL1xccysvZywgXCJcIik7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEVzY2FwZXMgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nIGZvciB1c2UgaW4gYSByZWd1bGFyIGV4cHJlc3Npb24uXG4gKiBAc3VtbWFyeSBBZGRzIGJhY2tzbGFzaGVzIGJlZm9yZSBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBzcGVjaWFsIG1lYW5pbmcgaW4gcmVndWxhciBleHByZXNzaW9ucyxcbiAqIGFsbG93aW5nIHRoZSBzdHJpbmcgdG8gYmUgdXNlZCBhcyBhIGxpdGVyYWwgbWF0Y2ggaW4gYSBSZWdFeHAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyAtIFRoZSBzdHJpbmcgdG8gZXNjYXBlIGZvciByZWd1bGFyIGV4cHJlc3Npb24gdXNlLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZXNjYXBlZCBzdHJpbmcgc2FmZSBmb3IgdXNlIGluIHJlZ3VsYXIgZXhwcmVzc2lvbnMuXG4gKlxuICogQGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHJpbmc6IHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCBcIlxcXFwkJlwiKTsgLy8gJCYgbWVhbnMgdGhlIHdob2xlIG1hdGNoZWQgc3RyaW5nXG59XG4iLCIvKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZhdWx0IGVuY29kaW5nIGZvciB0ZXh0IG9wZXJhdGlvbnMuXG4gKiBAc3VtbWFyeSBUaGUgc3RhbmRhcmQgVVRGLTggZW5jb2RpbmcgdXNlZCBmb3IgdGV4dCBwcm9jZXNzaW5nLlxuICogQGNvbnN0IHtzdHJpbmd9IEVuY29kaW5nXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBjb25zdCBFbmNvZGluZyA9IFwidXRmLThcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVndWxhciBleHByZXNzaW9uIGZvciBzZW1hbnRpYyB2ZXJzaW9uaW5nLlxuICogQHN1bW1hcnkgQSByZWdleCBwYXR0ZXJuIHRvIG1hdGNoIGFuZCBwYXJzZSBzZW1hbnRpYyB2ZXJzaW9uIHN0cmluZ3MuXG4gKiBAY29uc3Qge1JlZ0V4cH0gU2VtVmVyc2lvblJlZ2V4XG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBjb25zdCBTZW1WZXJzaW9uUmVnZXggPVxuICAvXihcXGQrKVxcLihcXGQrKVxcLihcXGQrKSg/Oi0oWzAtOUEtWmEtei1dKyg/OlxcLlswLTlBLVphLXpdKSkpL2c7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEVudW0gZm9yIHNlbWFudGljIHZlcnNpb24gY29tcG9uZW50cy5cbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHRocmVlIGxldmVscyBvZiBzZW1hbnRpYyB2ZXJzaW9uaW5nOiBQQVRDSCwgTUlOT1IsIGFuZCBNQUpPUi5cbiAqIEBlbnVtIHtzdHJpbmd9XG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBlbnVtIFNlbVZlcnNpb24ge1xuICAvKiogUGF0Y2ggdmVyc2lvbiBmb3IgYmFja3dhcmRzLWNvbXBhdGlibGUgYnVnIGZpeGVzLiAqL1xuICBQQVRDSCA9IFwicGF0Y2hcIixcbiAgLyoqIE1pbm9yIHZlcnNpb24gZm9yIGJhY2t3YXJkcy1jb21wYXRpYmxlIG5ldyBmZWF0dXJlcy4gKi9cbiAgTUlOT1IgPSBcIm1pbm9yXCIsXG4gIC8qKiBNYWpvciB2ZXJzaW9uIGZvciBjaGFuZ2VzIHRoYXQgYnJlYWsgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuICovXG4gIE1BSk9SID0gXCJtYWpvclwiLFxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBGbGFnIHRvIGluZGljYXRlIG5vbi1DSSBlbnZpcm9ubWVudC5cbiAqIEBzdW1tYXJ5IFVzZWQgdG8gc3BlY2lmeSB0aGF0IGEgY29tbWFuZCBzaG91bGQgcnVuIG91dHNpZGUgb2YgYSBDb250aW51b3VzIEludGVncmF0aW9uIGVudmlyb25tZW50LlxuICogQGNvbnN0IHtzdHJpbmd9IE5vQ0lGTGFnXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBjb25zdCBOb0NJRkxhZyA9IFwiLW5vLWNpXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEtleSBmb3IgdGhlIHNldHVwIHNjcmlwdCBpbiBwYWNrYWdlLmpzb24uXG4gKiBAc3VtbWFyeSBJZGVudGlmaWVzIHRoZSBzY3JpcHQgdGhhdCBydW5zIGFmdGVyIHBhY2thZ2UgaW5zdGFsbGF0aW9uLlxuICogQGNvbnN0IHtzdHJpbmd9IFNldHVwU2NyaXB0S2V5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBjb25zdCBTZXR1cFNjcmlwdEtleSA9IFwicG9zdGluc3RhbGxcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRW51bSBmb3IgdmFyaW91cyBhdXRoZW50aWNhdGlvbiB0b2tlbnMuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBmaWxlIG5hbWVzIGZvciBzdG9yaW5nIGRpZmZlcmVudCB0eXBlcyBvZiBhdXRoZW50aWNhdGlvbiB0b2tlbnMuXG4gKiBAZW51bSB7c3RyaW5nfVxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZW51bSBUb2tlbnMge1xuICAvKiogR2l0IGF1dGhlbnRpY2F0aW9uIHRva2VuIGZpbGUgbmFtZS4gKi9cbiAgR0lUID0gXCIudG9rZW5cIixcbiAgLyoqIE5QTSBhdXRoZW50aWNhdGlvbiB0b2tlbiBmaWxlIG5hbWUuICovXG4gIE5QTSA9IFwiLm5wbXRva2VuXCIsXG4gIC8qKiBEb2NrZXIgYXV0aGVudGljYXRpb24gdG9rZW4gZmlsZSBuYW1lLiAqL1xuICBET0NLRVIgPSBcIi5kb2NrZXJ0b2tlblwiLFxuICAvKiogQ29uZmx1ZW5jZSBhdXRoZW50aWNhdGlvbiB0b2tlbiBmaWxlIG5hbWUuICovXG4gIENPTkZMVUVOQ0UgPSBcIi5jb25mbHVlbmNlLXRva2VuXCIsXG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvZGUgdXNlZCB0byBpbmRpY2F0ZSBhbiBvcGVyYXRpb24gd2FzIGFib3J0ZWQuXG4gKiBAc3VtbWFyeSBTdGFuZGFyZCBtZXNzYWdlIHVzZWQgd2hlbiBhIHByb2Nlc3MgaXMgbWFudWFsbHkgdGVybWluYXRlZC5cbiAqIEBjb25zdCB7c3RyaW5nfSBBYm9ydENvZGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGNvbnN0IEFib3J0Q29kZSA9IFwiQWJvcnRlZFwiO1xuIiwiaW1wb3J0IHsgRW5jb2RpbmcgfSBmcm9tIFwiLi4vdXRpbHMvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBPdXRwdXRXcml0ZXIgfSBmcm9tIFwiLi9PdXRwdXRXcml0ZXJcIjtcbmltcG9ydCB7IFByb21pc2VFeGVjdXRvciB9IGZyb20gXCIuLi91dGlscy90eXBlc1wiO1xuaW1wb3J0IHsgT3V0cHV0VHlwZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBzdHlsZSB9IGZyb20gXCJzdHlsZWQtc3RyaW5nLWJ1aWxkZXJcIjtcbmltcG9ydCB7IExvZ2dlciwgTG9nZ2luZyB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBIHN0YW5kYXJkIG91dHB1dCB3cml0ZXIgZm9yIGhhbmRsaW5nIGNvbW1hbmQgZXhlY3V0aW9uIG91dHB1dC5cbiAqIEBzdW1tYXJ5IFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgT3V0cHV0V3JpdGVyIGludGVyZmFjZSBhbmQgcHJvdmlkZXMgbWV0aG9kcyBmb3JcbiAqIGhhbmRsaW5nIHZhcmlvdXMgdHlwZXMgb2Ygb3V0cHV0IGZyb20gY29tbWFuZCBleGVjdXRpb24sIGluY2x1ZGluZyBzdGFuZGFyZCBvdXRwdXQsXG4gKiBlcnJvciBvdXRwdXQsIGFuZCBleGl0IGNvZGVzLiBJdCBhbHNvIGluY2x1ZGVzIHV0aWxpdHkgbWV0aG9kcyBmb3IgcGFyc2luZyBjb21tYW5kc1xuICogYW5kIHJlc29sdmluZyBvciByZWplY3RpbmcgcHJvbWlzZXMgYmFzZWQgb24gZXhlY3V0aW9uIHJlc3VsdHMuXG4gKlxuICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgcmVzb2x2ZWQgdmFsdWUsIGRlZmF1bHRpbmcgdG8gc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBjbWQgLSBUaGUgY29tbWFuZCBzdHJpbmcgdG8gYmUgZXhlY3V0ZWQuXG4gKiBAcGFyYW0gbG9jayAtIEEgUHJvbWlzZUV4ZWN1dG9yIHRvIGNvbnRyb2wgdGhlIGFzeW5jaHJvbm91cyBmbG93LlxuICogQHBhcmFtIGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyAodW51c2VkIGluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uKS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBTdGFuZGFyZE91dHB1dFdyaXRlciB9IGZyb20gJ0BkZWNhZi10cy91dGlscyc7XG4gKiBpbXBvcnQgeyBQcm9taXNlRXhlY3V0b3IgfSBmcm9tICdAZGVjYWYtdHMvdXRpbHMnO1xuICogXG4gKiAvLyBDcmVhdGUgYSBwcm9taXNlIGV4ZWN1dG9yXG4gKiBjb25zdCBleGVjdXRvcjogUHJvbWlzZUV4ZWN1dG9yPHN0cmluZz4gPSB7XG4gKiAgIHJlc29sdmU6ICh2YWx1ZSkgPT4gY29uc29sZS5sb2coYFJlc29sdmVkOiAke3ZhbHVlfWApLFxuICogICByZWplY3Q6IChlcnJvcikgPT4gY29uc29sZS5lcnJvcihgUmVqZWN0ZWQ6ICR7ZXJyb3IubWVzc2FnZX1gKVxuICogfTtcbiAqIFxuICogLy8gQ3JlYXRlIGEgc3RhbmRhcmQgb3V0cHV0IHdyaXRlclxuICogY29uc3Qgd3JpdGVyID0gbmV3IFN0YW5kYXJkT3V0cHV0V3JpdGVyKCdscyAtbGEnLCBleGVjdXRvcik7XG4gKiBcbiAqIC8vIFVzZSB0aGUgd3JpdGVyIHRvIGhhbmRsZSBjb21tYW5kIG91dHB1dFxuICogd3JpdGVyLmRhdGEoJ0ZpbGUgbGlzdCBvdXRwdXQuLi4nKTtcbiAqIHdyaXRlci5leGl0KDAsIFsnQ29tbWFuZCBleGVjdXRlZCBzdWNjZXNzZnVsbHknXSk7XG4gKiBgYGBcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBTdGFuZGFyZE91dHB1dFdyaXRlclxuICogICBwYXJ0aWNpcGFudCBMb2dnZXJcbiAqICAgcGFydGljaXBhbnQgUHJvbWlzZUV4ZWN1dG9yXG4gKiAgIFxuICogICBDbGllbnQtPj5TdGFuZGFyZE91dHB1dFdyaXRlcjogbmV3IFN0YW5kYXJkT3V0cHV0V3JpdGVyKGNtZCwgbG9jaylcbiAqICAgU3RhbmRhcmRPdXRwdXRXcml0ZXItPj5Mb2dnZXI6IExvZ2dpbmcuZm9yKGNtZClcbiAqICAgXG4gKiAgIENsaWVudC0+PlN0YW5kYXJkT3V0cHV0V3JpdGVyOiBkYXRhKGNodW5rKVxuICogICBTdGFuZGFyZE91dHB1dFdyaXRlci0+PlN0YW5kYXJkT3V0cHV0V3JpdGVyOiBsb2coXCJzdGRvdXRcIiwgY2h1bmspXG4gKiAgIFN0YW5kYXJkT3V0cHV0V3JpdGVyLT4+TG9nZ2VyOiBsb2dnZXIuaW5mbyhsb2cpXG4gKiAgIFxuICogICBDbGllbnQtPj5TdGFuZGFyZE91dHB1dFdyaXRlcjogZXJyb3IoY2h1bmspXG4gKiAgIFN0YW5kYXJkT3V0cHV0V3JpdGVyLT4+U3RhbmRhcmRPdXRwdXRXcml0ZXI6IGxvZyhcInN0ZGVyclwiLCBjaHVuaylcbiAqICAgU3RhbmRhcmRPdXRwdXRXcml0ZXItPj5Mb2dnZXI6IGxvZ2dlci5pbmZvKGxvZylcbiAqICAgXG4gKiAgIENsaWVudC0+PlN0YW5kYXJkT3V0cHV0V3JpdGVyOiBleGl0KGNvZGUsIGxvZ3MpXG4gKiAgIFN0YW5kYXJkT3V0cHV0V3JpdGVyLT4+U3RhbmRhcmRPdXRwdXRXcml0ZXI6IGxvZyhcInN0ZG91dFwiLCBleGl0TWVzc2FnZSlcbiAqICAgYWx0IGNvZGUgPT09IDBcbiAqICAgICBTdGFuZGFyZE91dHB1dFdyaXRlci0+PlN0YW5kYXJkT3V0cHV0V3JpdGVyOiByZXNvbHZlKGxvZ3MpXG4gKiAgICAgU3RhbmRhcmRPdXRwdXRXcml0ZXItPj5Qcm9taXNlRXhlY3V0b3I6IGxvY2sucmVzb2x2ZShyZWFzb24pXG4gKiAgIGVsc2UgY29kZSAhPT0gMFxuICogICAgIFN0YW5kYXJkT3V0cHV0V3JpdGVyLT4+U3RhbmRhcmRPdXRwdXRXcml0ZXI6IHJlamVjdChlcnJvcilcbiAqICAgICBTdGFuZGFyZE91dHB1dFdyaXRlci0+PlByb21pc2VFeGVjdXRvcjogbG9jay5yZWplY3QocmVhc29uKVxuICogICBlbmRcbiAqL1xuZXhwb3J0IGNsYXNzIFN0YW5kYXJkT3V0cHV0V3JpdGVyPFIgPSBzdHJpbmc+IGltcGxlbWVudHMgT3V0cHV0V3JpdGVyIHtcbiAgcHJvdGVjdGVkIGxvZ2dlcjogTG9nZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjbWQ6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgbG9jazogUHJvbWlzZUV4ZWN1dG9yPFI+LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAuLi5hcmdzOiB1bmtub3duW11cbiAgKSB7XG4gICAgdGhpcy5sb2dnZXIgPSBMb2dnaW5nLmZvcih0aGlzLmNtZCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExvZ3Mgb3V0cHV0IHRvIHRoZSBjb25zb2xlLlxuICAgKiBAc3VtbWFyeSBGb3JtYXRzIGFuZCBsb2dzIHRoZSBnaXZlbiBkYXRhIHdpdGggYSB0aW1lc3RhbXAgYW5kIHR5cGUgaW5kaWNhdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gdHlwZSAtIFRoZSB0eXBlIG9mIG91dHB1dCAoc3Rkb3V0IG9yIHN0ZGVycikuXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGRhdGEgdG8gYmUgbG9nZ2VkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGxvZyh0eXBlOiBPdXRwdXRUeXBlLCBkYXRhOiBzdHJpbmcgfCBCdWZmZXIpIHtcbiAgICBkYXRhID0gQnVmZmVyLmlzQnVmZmVyKGRhdGEpID8gZGF0YS50b1N0cmluZyhFbmNvZGluZykgOiBkYXRhO1xuICAgIGNvbnN0IGxvZyA9IHR5cGUgPT09IFwic3RkZXJyXCIgPyBzdHlsZShkYXRhKS5yZWQudGV4dCA6IGRhdGE7XG4gICAgdGhpcy5sb2dnZXIuaW5mbyhsb2cpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIHN0YW5kYXJkIG91dHB1dCBkYXRhLlxuICAgKiBAc3VtbWFyeSBMb2dzIHRoZSBnaXZlbiBjaHVuayBhcyBzdGFuZGFyZCBvdXRwdXQuXG4gICAqXG4gICAqIEBwYXJhbSBjaHVuayAtIFRoZSBkYXRhIGNodW5rIHRvIGJlIGxvZ2dlZC5cbiAgICovXG4gIGRhdGEoY2h1bms6IGFueSkge1xuICAgIHRoaXMubG9nKFwic3Rkb3V0XCIsIFN0cmluZyhjaHVuaykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIGVycm9yIG91dHB1dCBkYXRhLlxuICAgKiBAc3VtbWFyeSBMb2dzIHRoZSBnaXZlbiBjaHVuayBhcyBlcnJvciBvdXRwdXQuXG4gICAqXG4gICAqIEBwYXJhbSBjaHVuayAtIFRoZSBlcnJvciBkYXRhIGNodW5rIHRvIGJlIGxvZ2dlZC5cbiAgICovXG4gIGVycm9yKGNodW5rOiBhbnkpIHtcbiAgICB0aGlzLmxvZyhcInN0ZGVyclwiLCBTdHJpbmcoY2h1bmspKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBlcnJvciBvYmplY3RzLlxuICAgKiBAc3VtbWFyeSBMb2dzIHRoZSBlcnJvciBtZXNzYWdlIGZyb20gdGhlIGdpdmVuIEVycm9yIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIGVyciAtIFRoZSBFcnJvciBvYmplY3QgdG8gYmUgbG9nZ2VkLlxuICAgKi9cbiAgZXJyb3JzKGVycjogRXJyb3IpIHtcbiAgICB0aGlzLmxvZyhcInN0ZGVyclwiLCBgRXJyb3IgZXhlY3V0aW5nIGNvbW1hbmQgZXhpdGVkIDogJHtlcnJ9YCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgdGhlIGV4aXQgb2YgYSBjb21tYW5kLlxuICAgKiBAc3VtbWFyeSBMb2dzIHRoZSBleGl0IGNvZGUgYW5kIHJlc29sdmVzIG9yIHJlamVjdHMgdGhlIHByb21pc2UgYmFzZWQgb24gdGhlIGNvZGUuXG4gICAqXG4gICAqIEBwYXJhbSBjb2RlIC0gVGhlIGV4aXQgY29kZSBvZiB0aGUgY29tbWFuZC5cbiAgICogQHBhcmFtIGxvZ3MgLSBBcnJheSBvZiBsb2cgbWVzc2FnZXMgdG8gYmUgcHJvY2Vzc2VkIGJlZm9yZSBleGl0aW5nLlxuICAgKi9cbiAgZXhpdChjb2RlOiBudW1iZXIgfCBzdHJpbmcsIGxvZ3M6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5sb2coXG4gICAgICBcInN0ZG91dFwiLFxuICAgICAgYGNvbW1hbmQgZXhpdGVkIGNvZGUgOiAke2NvZGUgPT09IDAgPyBzdHlsZShjb2RlLnRvU3RyaW5nKCkpLmdyZWVuLnRleHQgOiBzdHlsZShjb2RlID09PSBudWxsID8gXCJudWxsXCIgOiBjb2RlLnRvU3RyaW5nKCkpLnJlZC50ZXh0fWBcbiAgICApO1xuICAgIGlmIChjb2RlID09PSAwKSB7XG4gICAgICB0aGlzLnJlc29sdmUobG9ncy5tYXAoKGwpID0+IGwudHJpbSgpKS5qb2luKFwiXFxuXCIpIGFzIFIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlamVjdChuZXcgRXJyb3IobG9ncy5sZW5ndGggPyBsb2dzLmpvaW4oXCJcXG5cIikgOiBjb2RlLnRvU3RyaW5nKCkpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFBhcnNlcyBhIGNvbW1hbmQgc3RyaW5nIG9yIGFycmF5IGludG8gY29tcG9uZW50cy5cbiAgICogQHN1bW1hcnkgQ29udmVydHMgdGhlIGNvbW1hbmQgaW50byBhIGNvbnNpc3RlbnQgZm9ybWF0IGFuZCBzdG9yZXMgaXQsIHRoZW4gcmV0dXJucyBpdCBzcGxpdCBpbnRvIGNvbW1hbmQgYW5kIGFyZ3VtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZCBhcyBhIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzLlxuICAgKiBAcmV0dXJuIEEgdHVwbGUgY29udGFpbmluZyB0aGUgY29tbWFuZCBhbmQgaXRzIGFyZ3VtZW50cyBhcyBzZXBhcmF0ZSBlbGVtZW50cy5cbiAgICovXG4gIHBhcnNlQ29tbWFuZChjb21tYW5kOiBzdHJpbmcgfCBzdHJpbmdbXSk6IFtzdHJpbmcsIHN0cmluZ1tdXSB7XG4gICAgY29tbWFuZCA9IHR5cGVvZiBjb21tYW5kID09PSBcInN0cmluZ1wiID8gY29tbWFuZC5zcGxpdChcIiBcIikgOiBjb21tYW5kO1xuICAgIHRoaXMuY21kID0gY29tbWFuZC5qb2luKFwiIFwiKTtcbiAgICByZXR1cm4gW2NvbW1hbmRbMF0sIGNvbW1hbmQuc2xpY2UoMSldO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXNvbHZlcyB0aGUgcHJvbWlzZSB3aXRoIGEgc3VjY2VzcyBtZXNzYWdlLlxuICAgKiBAc3VtbWFyeSBMb2dzIGEgc3VjY2VzcyBtZXNzYWdlIGFuZCByZXNvbHZlcyB0aGUgcHJvbWlzZSB3aXRoIHRoZSBnaXZlbiByZWFzb24uXG4gICAqXG4gICAqIEBwYXJhbSByZWFzb24gLSBUaGUgcmVhc29uIGZvciByZXNvbHZpbmcgdGhlIHByb21pc2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb2x2ZShyZWFzb246IFIpIHtcbiAgICB0aGlzLmxvZyhcbiAgICAgIFwic3Rkb3V0XCIsXG4gICAgICBgJHt0aGlzLmNtZH0gZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5OiAke3N0eWxlKHJlYXNvbiA/IFwicmFuIHRvIGNvbXBsZXRpb25cIiA6IChyZWFzb24gYXMgc3RyaW5nKSkuZ3JlZW59YFxuICAgICk7XG4gICAgdGhpcy5sb2NrLnJlc29sdmUocmVhc29uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVqZWN0cyB0aGUgcHJvbWlzZSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBzdW1tYXJ5IExvZ3MgYW4gZXJyb3IgbWVzc2FnZSBhbmQgcmVqZWN0cyB0aGUgcHJvbWlzZSB3aXRoIHRoZSBnaXZlbiByZWFzb24uXG4gICAqXG4gICAqIEBwYXJhbSByZWFzb24gLSBUaGUgcmVhc29uIGZvciByZWplY3RpbmcgdGhlIHByb21pc2UsIGVpdGhlciBhIG51bWJlciAoZXhpdCBjb2RlKSBvciBhIHN0cmluZy5cbiAgICovXG4gIHByb3RlY3RlZCByZWplY3QocmVhc29uOiBudW1iZXIgfCBzdHJpbmcgfCBFcnJvcikge1xuICAgIGlmICghKHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgcmVhc29uID0gbmV3IEVycm9yKFxuICAgICAgICB0eXBlb2YgcmVhc29uID09PSBcIm51bWJlclwiID8gYEV4aXQgY29kZSAke3JlYXNvbn1gIDogcmVhc29uXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmxvZyhcbiAgICAgIFwic3RkZXJyXCIsXG4gICAgICBgJHt0aGlzLmNtZH0gZmFpbGVkIHRvIGV4ZWN1dGU6ICR7c3R5bGUocmVhc29uLm1lc3NhZ2UpLnJlZH1gXG4gICAgKTtcbiAgICB0aGlzLmxvY2sucmVqZWN0KHJlYXNvbik7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIENoaWxkUHJvY2Vzc1dpdGhvdXROdWxsU3RyZWFtcyxcbiAgc3Bhd24sXG4gIFNwYXduT3B0aW9uc1dpdGhvdXRTdGRpbyxcbn0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IFN0YW5kYXJkT3V0cHV0V3JpdGVyIH0gZnJvbSBcIi4uL3dyaXRlcnMvU3RhbmRhcmRPdXRwdXRXcml0ZXJcIjtcbmltcG9ydCB7IENvbW1hbmRSZXN1bHQgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgT3V0cHV0V3JpdGVyQ29uc3RydWN0b3IgfSBmcm9tIFwiLi4vd3JpdGVycy90eXBlc1wiO1xuaW1wb3J0IHsgQWJvcnRDb2RlIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBMb2dnZXIsIExvZ2dpbmcgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIGxvY2tlZCB2ZXJzaW9uIG9mIGEgZnVuY3Rpb24uXG4gKiBAc3VtbWFyeSBUaGlzIGhpZ2hlci1vcmRlciBmdW5jdGlvbiB0YWtlcyBhIGZ1bmN0aW9uIGFuZCByZXR1cm5zIGEgbmV3IGZ1bmN0aW9uIHRoYXQgZW5zdXJlc1xuICogc2VxdWVudGlhbCBleGVjdXRpb24gb2YgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLCBldmVuIHdoZW4gY2FsbGVkIG11bHRpcGxlIHRpbWVzIGNvbmN1cnJlbnRseS5cbiAqIEl0IHVzZXMgYSBQcm9taXNlLWJhc2VkIGxvY2tpbmcgbWVjaGFuaXNtIHRvIHF1ZXVlIGZ1bmN0aW9uIGNhbGxzLlxuICpcbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHJldHVybiB0eXBlIG9mIHRoZSBpbnB1dCBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gZiAtIFRoZSBmdW5jdGlvbiB0byBiZSBsb2NrZWQuIEl0IGNhbiB0YWtlIGFueSBudW1iZXIgb2YgcGFyYW1ldGVycyBhbmQgcmV0dXJuIGEgdmFsdWUgb2YgdHlwZSBSLlxuICogQHJldHVybiBBIG5ldyBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZSBhcyB0aGUgaW5wdXQgZnVuY3Rpb24sIGJ1dCB3aXRoIHNlcXVlbnRpYWwgZXhlY3V0aW9uIGd1YXJhbnRlZWQuXG4gKlxuICogQGZ1bmN0aW9uIGxvY2tpZnlcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICogICBwYXJ0aWNpcGFudCBMb2NrZWRGdW5jdGlvblxuICogICBwYXJ0aWNpcGFudCBPcmlnaW5hbEZ1bmN0aW9uXG4gKiAgIENhbGxlci0+PkxvY2tlZEZ1bmN0aW9uOiBDYWxsIHdpdGggcGFyYW1zXG4gKiAgIExvY2tlZEZ1bmN0aW9uLT4+TG9ja2VkRnVuY3Rpb246IENoZWNrIGN1cnJlbnQgbG9ja1xuICogICBhbHQgTG9jayBpcyByZXNvbHZlZFxuICogICAgIExvY2tlZEZ1bmN0aW9uLT4+T3JpZ2luYWxGdW5jdGlvbjogRXhlY3V0ZSB3aXRoIHBhcmFtc1xuICogICAgIE9yaWdpbmFsRnVuY3Rpb24tLT4+TG9ja2VkRnVuY3Rpb246IFJldHVybiByZXN1bHRcbiAqICAgICBMb2NrZWRGdW5jdGlvbi0tPj5DYWxsZXI6IFJldHVybiByZXN1bHRcbiAqICAgZWxzZSBMb2NrIGlzIHBlbmRpbmdcbiAqICAgICBMb2NrZWRGdW5jdGlvbi0+PkxvY2tlZEZ1bmN0aW9uOiBRdWV1ZSBleGVjdXRpb25cbiAqICAgICBMb2NrZWRGdW5jdGlvbi0tPj5DYWxsZXI6IFJldHVybiBwcm9taXNlXG4gKiAgICAgTm90ZSBvdmVyIExvY2tlZEZ1bmN0aW9uOiBXYWl0IGZvciBwcmV2aW91cyBleGVjdXRpb25cbiAqICAgICBMb2NrZWRGdW5jdGlvbi0+Pk9yaWdpbmFsRnVuY3Rpb246IEV4ZWN1dGUgd2l0aCBwYXJhbXNcbiAqICAgICBPcmlnaW5hbEZ1bmN0aW9uLS0+PkxvY2tlZEZ1bmN0aW9uOiBSZXR1cm4gcmVzdWx0XG4gKiAgICAgTG9ja2VkRnVuY3Rpb24tLT4+Q2FsbGVyOiBSZXNvbHZlIHByb21pc2Ugd2l0aCByZXN1bHRcbiAqICAgZW5kXG4gKiAgIExvY2tlZEZ1bmN0aW9uLT4+TG9ja2VkRnVuY3Rpb246IFVwZGF0ZSBsb2NrXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9ja2lmeTxSPihmOiAoLi4ucGFyYW1zOiB1bmtub3duW10pID0+IFIpIHtcbiAgbGV0IGxvY2s6IFByb21pc2U8UiB8IHZvaWQ+ID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIHJldHVybiAoLi4ucGFyYW1zOiB1bmtub3duW10pID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBsb2NrLnRoZW4oKCkgPT4gZiguLi5wYXJhbXMpKTtcbiAgICBsb2NrID0gcmVzdWx0LmNhdGNoKCgpID0+IHt9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDaGFpbnMgbXVsdGlwbGUgYWJvcnQgc2lnbmFscyB0byBhIGNvbnRyb2xsZXIuXG4gKiBAc3VtbWFyeSBDcmVhdGVzIGEgbWVjaGFuaXNtIHdoZXJlIG11bHRpcGxlIGFib3J0IHNpZ25hbHMgY2FuIHRyaWdnZXIgYSBzaW5nbGUgYWJvcnQgY29udHJvbGxlci5cbiAqIFRoaXMgaXMgdXNlZnVsIGZvciBjb29yZGluYXRpbmcgY2FuY2VsbGF0aW9uIGFjcm9zcyBtdWx0aXBsZSBhc3luY2hyb25vdXMgb3BlcmF0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0Fib3J0Q29udHJvbGxlcn0gY29udHJvbGxlciAtIFRoZSBhYm9ydCBjb250cm9sbGVyIHRvIGJlIHRyaWdnZXJlZCBieSBzaWduYWxzLlxuICogQHBhcmFtIHsuLi5BYm9ydFNpZ25hbH0gc2lnbmFscyAtIE9uZSBvciBtb3JlIGFib3J0IHNpZ25hbHMgdGhhdCBjYW4gdHJpZ2dlciB0aGUgY29udHJvbGxlci5cbiAqIEByZXR1cm4ge0Fib3J0Q29udHJvbGxlcn0gVGhlIGlucHV0IGNvbnRyb2xsZXIsIG5vdyBjb25uZWN0ZWQgdG8gdGhlIHNpZ25hbHMuXG4gKlxuICogQGZ1bmN0aW9uIGNoYWluQWJvcnRDb250cm9sbGVyXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhaW5BYm9ydENvbnRyb2xsZXIoXG4gIGNvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcixcbiAgLi4uc2lnbmFsczogQWJvcnRTaWduYWxbXVxuKTogQWJvcnRDb250cm9sbGVyO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbmV3IGNvbnRyb2xsZXIgY2hhaW5lZCB0byBtdWx0aXBsZSBhYm9ydCBzaWduYWxzLlxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIG5ldyBhYm9ydCBjb250cm9sbGVyIHRoYXQgd2lsbCBiZSB0cmlnZ2VyZWQgaWYgYW55IG9mIHRoZSBwcm92aWRlZCBzaWduYWxzIGFyZSBhYm9ydGVkLlxuICpcbiAqIEBwYXJhbSB7Li4uQWJvcnRTaWduYWx9IHNpZ25hbHMgLSBPbmUgb3IgbW9yZSBhYm9ydCBzaWduYWxzIHRoYXQgY2FuIHRyaWdnZXIgdGhlIG5ldyBjb250cm9sbGVyLlxuICogQHJldHVybiB7QWJvcnRDb250cm9sbGVyfSBBIG5ldyBhYm9ydCBjb250cm9sbGVyIGNvbm5lY3RlZCB0byB0aGUgc2lnbmFscy5cbiAqXG4gKiBAZnVuY3Rpb24gY2hhaW5BYm9ydENvbnRyb2xsZXJcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFpbkFib3J0Q29udHJvbGxlcihcbiAgLi4uc2lnbmFsczogQWJvcnRTaWduYWxbXVxuKTogQWJvcnRDb250cm9sbGVyO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hhaW5BYm9ydENvbnRyb2xsZXIoXG4gIGFyZ3VtZW50MDogQWJvcnRDb250cm9sbGVyIHwgQWJvcnRTaWduYWwsXG4gIC4uLnJlbWFpbmRlcjogQWJvcnRTaWduYWxbXVxuKTogQWJvcnRDb250cm9sbGVyIHtcbiAgbGV0IHNpZ25hbHM6IEFib3J0U2lnbmFsW107XG4gIGxldCBjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXI7XG5cbiAgLy8gbm9ybWFsaXplIGFyZ3NcbiAgaWYgKGFyZ3VtZW50MCBpbnN0YW5jZW9mIEFib3J0U2lnbmFsKSB7XG4gICAgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBzaWduYWxzID0gW2FyZ3VtZW50MCwgLi4ucmVtYWluZGVyXTtcbiAgfSBlbHNlIHtcbiAgICBjb250cm9sbGVyID0gYXJndW1lbnQwO1xuICAgIHNpZ25hbHMgPSByZW1haW5kZXI7XG4gIH1cblxuICAvLyBpZiB0aGUgY29udHJvbGxlciBpcyBhbHJlYWR5IGFib3J0ZWQsIGV4aXQgZWFybHlcbiAgaWYgKGNvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICByZXR1cm4gY29udHJvbGxlcjtcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiBjb250cm9sbGVyLmFib3J0KCk7XG5cbiAgZm9yIChjb25zdCBzaWduYWwgb2Ygc2lnbmFscykge1xuICAgIC8vIGNoZWNrIGJlZm9yZSBhZGRpbmchIChhbmQgYXNzdW1lIHRoZXJlIGlzIG5vIHBvc3NpYmxlIHdheSB0aGF0IHRoZSBzaWduYWwgY291bGRcbiAgICAvLyBhYm9ydCBiZXR3ZWVuIHRoZSBgaWZgIGNoZWNrIGFuZCBhZGRpbmcgdGhlIGV2ZW50IGxpc3RlbmVyKVxuICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgICAgY29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgaGFuZGxlciwge1xuICAgICAgb25jZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gY29udHJvbGxlcjtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gU3Bhd25zIGEgY29tbWFuZCBhcyBhIGNoaWxkIHByb2Nlc3Mgd2l0aCBvdXRwdXQgaGFuZGxpbmcuXG4gKiBAc3VtbWFyeSBDcmVhdGVzIGEgY2hpbGQgcHJvY2VzcyB0byBleGVjdXRlIGEgY29tbWFuZCB3aXRoIHN1cHBvcnQgZm9yIHBpcGluZyBtdWx0aXBsZSBjb21tYW5kcyxcbiAqIGN1c3RvbSBvdXRwdXQgaGFuZGxpbmcsIGFuZCBhYm9ydCBjb250cm9sLiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mXG4gKiBzcGF3bmluZyBwcm9jZXNzZXMgYW5kIGNvbm5lY3RpbmcgdGhlaXIgaW5wdXRzL291dHB1dHMgd2hlbiBwaXBpbmcgaXMgdXNlZC5cbiAqXG4gKiBAdGVtcGxhdGUgUiAtIFRoZSB0eXBlIG9mIHRoZSBwcm9jZXNzZWQgb3V0cHV0LCBkZWZhdWx0aW5nIHRvIHN0cmluZy5cbiAqIEBwYXJhbSB7U3RhbmRhcmRPdXRwdXRXcml0ZXI8Uj59IG91dHB1dCAtIFRoZSBvdXRwdXQgd3JpdGVyIHRvIGhhbmRsZSBjb21tYW5kIG91dHB1dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gZXhlY3V0ZSwgY2FuIGluY2x1ZGUgcGlwZSBvcGVyYXRvcnMuXG4gKiBAcGFyYW0ge1NwYXduT3B0aW9uc1dpdGhvdXRTdGRpb30gb3B0cyAtIE9wdGlvbnMgZm9yIHRoZSBzcGF3bmVkIHByb2Nlc3MuXG4gKiBAcGFyYW0ge0Fib3J0Q29udHJvbGxlcn0gYWJvcnQgLSBDb250cm9sbGVyIHRvIGFib3J0IHRoZSBjb21tYW5kIGV4ZWN1dGlvbi5cbiAqIEBwYXJhbSB7TG9nZ2VyfSBsb2dnZXIgLSBMb2dnZXIgZm9yIHJlY29yZGluZyBjb21tYW5kIGV4ZWN1dGlvbiBkZXRhaWxzLlxuICogQHJldHVybiB7Q2hpbGRQcm9jZXNzV2l0aG91dE51bGxTdHJlYW1zfSBUaGUgc3Bhd25lZCBjaGlsZCBwcm9jZXNzLlxuICpcbiAqIEBmdW5jdGlvbiBzcGF3bkNvbW1hbmRcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGF3bkNvbW1hbmQ8UiA9IHN0cmluZz4oXG4gIG91dHB1dDogU3RhbmRhcmRPdXRwdXRXcml0ZXI8Uj4sXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgb3B0czogU3Bhd25PcHRpb25zV2l0aG91dFN0ZGlvLFxuICBhYm9ydDogQWJvcnRDb250cm9sbGVyLFxuICBsb2dnZXI6IExvZ2dlclxuKTogQ2hpbGRQcm9jZXNzV2l0aG91dE51bGxTdHJlYW1zIHtcbiAgZnVuY3Rpb24gc3Bhd25Jbm5lcihjb21tYW5kOiBzdHJpbmcsIGNvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcikge1xuICAgIGNvbnN0IFtjbWQsIGFyZ3pdID0gb3V0cHV0LnBhcnNlQ29tbWFuZChjb21tYW5kKTtcbiAgICBsb2dnZXIuaW5mbyhgUnVubmluZyBjb21tYW5kOiAke2NtZH1gKTtcbiAgICBsb2dnZXIuZGVidWcoYHdpdGggYXJnczogJHthcmd6LmpvaW4oXCIgXCIpfWApO1xuICAgIGNvbnN0IGNoaWxkUHJvY2VzcyA9IHNwYXduKGNtZCwgYXJneiwge1xuICAgICAgLi4ub3B0cyxcbiAgICAgIGN3ZDogb3B0cy5jd2QgfHwgcHJvY2Vzcy5jd2QoKSxcbiAgICAgIGVudjogT2JqZWN0LmFzc2lnbih7fSwgcHJvY2Vzcy5lbnYsIG9wdHMuZW52LCB7IFBBVEg6IHByb2Nlc3MuZW52LlBBVEggfSksXG4gICAgICBzaGVsbDogb3B0cy5zaGVsbCB8fCBmYWxzZSxcbiAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gICAgbG9nZ2VyLnZlcmJvc2UoYHBpZCA6ICR7Y2hpbGRQcm9jZXNzLnBpZH1gKTtcbiAgICByZXR1cm4gY2hpbGRQcm9jZXNzO1xuICB9XG5cbiAgY29uc3QgbSA9IGNvbW1hbmQubWF0Y2goL1s8PiQjXS9nKTtcbiAgaWYgKG0pXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgY29tbWFuZDogJHtjb21tYW5kfS4gY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzOiAke219YFxuICAgICk7XG4gIGlmIChjb21tYW5kLmluY2x1ZGVzKFwiIHwgXCIpKSB7XG4gICAgY29uc3QgY21kcyA9IGNvbW1hbmQuc3BsaXQoXCIgfCBcIik7XG4gICAgY29uc3Qgc3Bhd25zID0gW107XG4gICAgY29uc3QgY29udHJvbGxlcnMgPSBuZXcgQXJyYXkoY21kcy5sZW5ndGgpO1xuICAgIGNvbnRyb2xsZXJzWzBdID0gYWJvcnQ7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaSAhPT0gMClcbiAgICAgICAgY29udHJvbGxlcnNbaV0gPSBjaGFpbkFib3J0Q29udHJvbGxlcihjb250cm9sbGVyc1tpIC0gMV0uc2lnbmFsKTtcbiAgICAgIHNwYXducy5wdXNoKHNwYXduSW5uZXIoY21kc1tpXSwgY29udHJvbGxlcnNbaV0pKTtcbiAgICAgIGlmIChpID09PSAwKSBjb250aW51ZTtcbiAgICAgIHNwYXduc1tpIC0gMV0uc3Rkb3V0LnBpcGUoc3Bhd25zW2ldLnN0ZGluKTtcbiAgICB9XG4gICAgcmV0dXJuIHNwYXduc1tjbWRzLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgcmV0dXJuIHNwYXduSW5uZXIoY29tbWFuZCwgYWJvcnQpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFeGVjdXRlcyBhIGNvbW1hbmQgYXN5bmNocm9ub3VzbHkgd2l0aCBjdXN0b21pemFibGUgb3V0cHV0IGhhbmRsaW5nLlxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiBydW5zIGEgc2hlbGwgY29tbWFuZCBhcyBhIGNoaWxkIHByb2Nlc3MsIHByb3ZpZGluZyBmaW5lLWdyYWluZWRcbiAqIGNvbnRyb2wgb3ZlciBpdHMgZXhlY3V0aW9uIGFuZCBvdXRwdXQgaGFuZGxpbmcuIEl0IHN1cHBvcnRzIGN1c3RvbSBvdXRwdXQgd3JpdGVycyxcbiAqIGFsbG93cyBmb3IgY29tbWFuZCBhYm9ydGlvbiwgYW5kIGNhcHR1cmVzIGJvdGggc3Rkb3V0IGFuZCBzdGRlcnIuXG4gKlxuICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgcmVzb2x2ZWQgdmFsdWUgZnJvbSB0aGUgY29tbWFuZCBleGVjdXRpb24uXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZCB0byBydW4sIGVpdGhlciBhcyBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIG9wdHMgLSBTcGF3biBvcHRpb25zIGZvciB0aGUgY2hpbGQgcHJvY2Vzcy4gRGVmYXVsdHMgdG8gYW4gZW1wdHkgb2JqZWN0LlxuICogQHBhcmFtIG91dHB1dENvbnN0cnVjdG9yIC0gQ29uc3RydWN0b3IgZm9yIHRoZSBvdXRwdXQgd3JpdGVyLiBEZWZhdWx0cyB0byBTdGFuZGFyZE91dHB1dFdyaXRlci5cbiAqIEBwYXJhbSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgb3V0cHV0IGNvbnN0cnVjdG9yLlxuICogQHJldHVybiB7Q29tbWFuZFJlc3VsdH0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNvbW1hbmQgcmVzdWx0IG9mIHR5cGUgUi5cbiAqXG4gKiBAZnVuY3Rpb24gcnVuQ29tbWFuZFxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gKiAgIHBhcnRpY2lwYW50IHJ1bkNvbW1hbmRcbiAqICAgcGFydGljaXBhbnQgT3V0cHV0V3JpdGVyXG4gKiAgIHBhcnRpY2lwYW50IENoaWxkUHJvY2Vzc1xuICogICBDYWxsZXItPj5ydW5Db21tYW5kOiBDYWxsIHdpdGggY29tbWFuZCBhbmQgb3B0aW9uc1xuICogICBydW5Db21tYW5kLT4+T3V0cHV0V3JpdGVyOiBDcmVhdGUgbmV3IGluc3RhbmNlXG4gKiAgIHJ1bkNvbW1hbmQtPj5PdXRwdXRXcml0ZXI6IFBhcnNlIGNvbW1hbmRcbiAqICAgcnVuQ29tbWFuZC0+PkNoaWxkUHJvY2VzczogU3Bhd24gcHJvY2Vzc1xuICogICBDaGlsZFByb2Nlc3MtLT4+cnVuQ29tbWFuZDogUmV0dXJuIHByb2Nlc3Mgb2JqZWN0XG4gKiAgIHJ1bkNvbW1hbmQtPj5DaGlsZFByb2Nlc3M6IFNldCB1cCBldmVudCBsaXN0ZW5lcnNcbiAqICAgbG9vcCBGb3IgZWFjaCBzdGRvdXQgZGF0YVxuICogICAgIENoaWxkUHJvY2Vzcy0+PnJ1bkNvbW1hbmQ6IEVtaXQgc3Rkb3V0IGRhdGFcbiAqICAgICBydW5Db21tYW5kLT4+T3V0cHV0V3JpdGVyOiBIYW5kbGUgc3Rkb3V0IGRhdGFcbiAqICAgZW5kXG4gKiAgIGxvb3AgRm9yIGVhY2ggc3RkZXJyIGRhdGFcbiAqICAgICBDaGlsZFByb2Nlc3MtPj5ydW5Db21tYW5kOiBFbWl0IHN0ZGVyciBkYXRhXG4gKiAgICAgcnVuQ29tbWFuZC0+Pk91dHB1dFdyaXRlcjogSGFuZGxlIHN0ZGVyciBkYXRhXG4gKiAgIGVuZFxuICogICBDaGlsZFByb2Nlc3MtPj5ydW5Db21tYW5kOiBFbWl0IGVycm9yIChpZiBhbnkpXG4gKiAgIHJ1bkNvbW1hbmQtPj5PdXRwdXRXcml0ZXI6IEhhbmRsZSBlcnJvclxuICogICBDaGlsZFByb2Nlc3MtPj5ydW5Db21tYW5kOiBFbWl0IGV4aXRcbiAqICAgcnVuQ29tbWFuZC0+Pk91dHB1dFdyaXRlcjogSGFuZGxlIGV4aXRcbiAqICAgT3V0cHV0V3JpdGVyLS0+PnJ1bkNvbW1hbmQ6IFJlc29sdmUgb3IgcmVqZWN0IHByb21pc2VcbiAqICAgcnVuQ29tbWFuZC0tPj5DYWxsZXI6IFJldHVybiBDb21tYW5kUmVzdWx0XG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuQ29tbWFuZDxSID0gc3RyaW5nPihcbiAgY29tbWFuZDogc3RyaW5nLFxuICBvcHRzOiBTcGF3bk9wdGlvbnNXaXRob3V0U3RkaW8gPSB7fSxcbiAgb3V0cHV0Q29uc3RydWN0b3I6IE91dHB1dFdyaXRlckNvbnN0cnVjdG9yPFxuICAgIFIsXG4gICAgU3RhbmRhcmRPdXRwdXRXcml0ZXI8Uj4sXG4gICAgRXJyb3JcbiAgPiA9IFN0YW5kYXJkT3V0cHV0V3JpdGVyPFI+LFxuICAuLi5hcmdzOiB1bmtub3duW11cbik6IENvbW1hbmRSZXN1bHQ8Uj4ge1xuICBjb25zdCBsb2dnZXIgPSBMb2dnaW5nLmZvcihydW5Db21tYW5kKTtcbiAgY29uc3QgYWJvcnQgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgY29uc3QgcmVzdWx0OiBPbWl0PENvbW1hbmRSZXN1bHQsIFwicHJvbWlzZVwiIHwgXCJwaXBlXCI+ID0ge1xuICAgIGFib3J0OiBhYm9ydCxcbiAgICBjb21tYW5kOiBjb21tYW5kLFxuICAgIGxvZ3M6IFtdLFxuICAgIGVycnM6IFtdLFxuICB9O1xuXG4gIGNvbnN0IGxvY2sgPSBuZXcgUHJvbWlzZTxSPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbGV0IG91dHB1dDtcbiAgICB0cnkge1xuICAgICAgb3V0cHV0ID0gbmV3IG91dHB1dENvbnN0cnVjdG9yKFxuICAgICAgICBjb21tYW5kLFxuICAgICAgICB7XG4gICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICByZWplY3QsXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmFyZ3NcbiAgICAgICk7XG5cbiAgICAgIHJlc3VsdC5jbWQgPSBzcGF3bkNvbW1hbmQ8Uj4ob3V0cHV0LCBjb21tYW5kLCBvcHRzLCBhYm9ydCwgbG9nZ2VyKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgRXJyb3IgcnVubmluZyBjb21tYW5kICR7Y29tbWFuZH06ICR7ZX1gKSk7XG4gICAgfVxuXG4gICAgcmVzdWx0LmNtZC5zdGRvdXQuc2V0RW5jb2RpbmcoXCJ1dGY4XCIpO1xuXG4gICAgcmVzdWx0LmNtZC5zdGRvdXQub24oXCJkYXRhXCIsIChjaHVuazogYW55KSA9PiB7XG4gICAgICBjaHVuayA9IGNodW5rLnRvU3RyaW5nKCk7XG4gICAgICByZXN1bHQubG9ncy5wdXNoKGNodW5rKTtcbiAgICAgIG91dHB1dC5kYXRhKGNodW5rKTtcbiAgICB9KTtcblxuICAgIHJlc3VsdC5jbWQuc3RkZXJyLm9uKFwiZGF0YVwiLCAoZGF0YTogYW55KSA9PiB7XG4gICAgICBkYXRhID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgcmVzdWx0LmVycnMucHVzaChkYXRhKTtcbiAgICAgIG91dHB1dC5lcnJvcihkYXRhKTtcbiAgICB9KTtcblxuICAgIHJlc3VsdC5jbWQub25jZShcImVycm9yXCIsIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICBvdXRwdXQuZXhpdChlcnIubWVzc2FnZSwgcmVzdWx0LmVycnMpO1xuICAgIH0pO1xuXG4gICAgcmVzdWx0LmNtZC5vbmNlKFwiZXhpdFwiLCAoY29kZTogbnVtYmVyID0gMCkgPT4ge1xuICAgICAgaWYgKGFib3J0LnNpZ25hbC5hYm9ydGVkICYmIGNvZGUgPT09IG51bGwpIGNvZGUgPSBBYm9ydENvZGUgYXMgYW55O1xuICAgICAgb3V0cHV0LmV4aXQoY29kZSwgY29kZSA9PT0gMCA/IHJlc3VsdC5sb2dzIDogcmVzdWx0LmVycnMpO1xuICAgIH0pO1xuICB9KTtcblxuICBPYmplY3QuYXNzaWduKHJlc3VsdCwge1xuICAgIHByb21pc2U6IGxvY2ssXG4gICAgcGlwZTogYXN5bmMgPEU+KGNiOiAocjogUikgPT4gRSkgPT4ge1xuICAgICAgY29uc3QgbCA9IGxvZ2dlci5mb3IoXCJwaXBlXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbC52ZXJib3NlKGBFeGVjdXRpbmcgcGlwZSBmdW5jdGlvbiAke2NvbW1hbmR9Li4uYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogUiA9IGF3YWl0IGxvY2s7XG4gICAgICAgIGwudmVyYm9zZShgUGlwaW5nIG91dHB1dCB0byAke2NiLm5hbWV9OiAke3Jlc3VsdH1gKTtcbiAgICAgICAgcmV0dXJuIGNiKHJlc3VsdCk7XG4gICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgIGwuZXJyb3IoYEVycm9yIHBpcGluZyBjb21tYW5kIG91dHB1dDogJHtlfWApO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQgYXMgQ29tbWFuZFJlc3VsdDxSPjtcbn1cbiIsImltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBwYXRjaFN0cmluZyB9IGZyb20gXCIuL3RleHRcIjtcbmltcG9ydCB7IHJ1bkNvbW1hbmQgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgRGVwZW5kZW5jeU1hcCwgU2ltcGxlRGVwZW5kZW5jeU1hcCB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5cbmNvbnN0IGxvZ2dlciA9IExvZ2dpbmcuZm9yKFwiZnNcIik7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFBhdGNoZXMgYSBmaWxlIHdpdGggZ2l2ZW4gdmFsdWVzLlxuICogQHN1bW1hcnkgUmVhZHMgYSBmaWxlLCBhcHBsaWVzIHBhdGNoZXMgdXNpbmcgVGV4dFV0aWxzLCBhbmQgd3JpdGVzIHRoZSByZXN1bHQgYmFjayB0byB0aGUgZmlsZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBmaWxlIHRvIGJlIHBhdGNoZWQuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz59IHZhbHVlcyAtIFRoZSB2YWx1ZXMgdG8gcGF0Y2ggaW50byB0aGUgZmlsZS5cbiAqIEByZXR1cm4ge3ZvaWR9XG4gKlxuICogQGZ1bmN0aW9uIHBhdGNoRmlsZVxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gKiAgIHBhcnRpY2lwYW50IHBhdGNoRmlsZVxuICogICBwYXJ0aWNpcGFudCBmc1xuICogICBwYXJ0aWNpcGFudCByZWFkRmlsZVxuICogICBwYXJ0aWNpcGFudCBUZXh0VXRpbHNcbiAqICAgcGFydGljaXBhbnQgd3JpdGVGaWxlXG4gKiAgIENhbGxlci0+PnBhdGNoRmlsZTogQ2FsbCB3aXRoIHBhdGggYW5kIHZhbHVlc1xuICogICBwYXRjaEZpbGUtPj5mczogQ2hlY2sgaWYgZmlsZSBleGlzdHNcbiAqICAgcGF0Y2hGaWxlLT4+cmVhZEZpbGU6IFJlYWQgZmlsZSBjb250ZW50XG4gKiAgIHJlYWRGaWxlLT4+ZnM6IFJlYWQgZmlsZVxuICogICBmcy0tPj5yZWFkRmlsZTogUmV0dXJuIGZpbGUgY29udGVudFxuICogICByZWFkRmlsZS0tPj5wYXRjaEZpbGU6IFJldHVybiBmaWxlIGNvbnRlbnRcbiAqICAgcGF0Y2hGaWxlLT4+VGV4dFV0aWxzOiBQYXRjaCBzdHJpbmdcbiAqICAgVGV4dFV0aWxzLS0+PnBhdGNoRmlsZTogUmV0dXJuIHBhdGNoZWQgY29udGVudFxuICogICBwYXRjaEZpbGUtPj53cml0ZUZpbGU6IFdyaXRlIHBhdGNoZWQgY29udGVudFxuICogICB3cml0ZUZpbGUtPj5mczogV3JpdGUgdG8gZmlsZVxuICogICBmcy0tPj53cml0ZUZpbGU6IEZpbGUgd3JpdHRlblxuICogICB3cml0ZUZpbGUtLT4+cGF0Y2hGaWxlOiBGaWxlIHdyaXR0ZW5cbiAqICAgcGF0Y2hGaWxlLS0+PkNhbGxlcjogUGF0Y2hpbmcgY29tcGxldGVcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaEZpbGUoXG4gIHBhdGg6IHN0cmluZyxcbiAgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+XG4pIHtcbiAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihwYXRjaEZpbGUpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMocGF0aCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIG5vdCBmb3VuZCBhdCBwYXRoIFwiJHtwYXRofVwiLmApO1xuICBsZXQgY29udGVudCA9IHJlYWRGaWxlKHBhdGgpO1xuXG4gIHRyeSB7XG4gICAgbG9nLnZlcmJvc2UoYFBhdGNoaW5nIGZpbGUgXCIke3BhdGh9XCIuLi5gKTtcbiAgICBsb2cuZGVidWcoYHdpdGggdmFsdWU6ICR7SlNPTi5zdHJpbmdpZnkodmFsdWVzKX1gKTtcbiAgICBjb250ZW50ID0gcGF0Y2hTdHJpbmcoY29udGVudCwgdmFsdWVzKTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHBhdGNoaW5nIGZpbGU6ICR7ZXJyb3J9YCk7XG4gIH1cbiAgd3JpdGVGaWxlKHBhdGgsIGNvbnRlbnQpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZWFkcyBhIGZpbGUgYW5kIHJldHVybnMgaXRzIGNvbnRlbnQuXG4gKiBAc3VtbWFyeSBSZWFkcyB0aGUgY29udGVudCBvZiBhIGZpbGUgYXQgdGhlIHNwZWNpZmllZCBwYXRoIGFuZCByZXR1cm5zIGl0IGFzIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGZpbGUgdG8gYmUgcmVhZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUuXG4gKlxuICogQGZ1bmN0aW9uIHJlYWRGaWxlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZEZpbGUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihyZWFkRmlsZSk7XG4gIHRyeSB7XG4gICAgbG9nLnZlcmJvc2UoYFJlYWRpbmcgZmlsZSBcIiR7cGF0aH1cIi4uLmApO1xuICAgIHJldHVybiBmcy5yZWFkRmlsZVN5bmMocGF0aCwgXCJ1dGY4XCIpO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZy52ZXJib3NlKGBFcnJvciByZWFkaW5nIGZpbGUgXCIke3BhdGh9XCI6ICR7ZXJyb3J9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciByZWFkaW5nIGZpbGUgXCIke3BhdGh9XCI6ICR7ZXJyb3J9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gV3JpdGVzIGRhdGEgdG8gYSBmaWxlLlxuICogQHN1bW1hcnkgV3JpdGVzIHRoZSBwcm92aWRlZCBkYXRhIHRvIGEgZmlsZSBhdCB0aGUgc3BlY2lmaWVkIHBhdGguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgZmlsZSB0byBiZSB3cml0dGVuLlxuICogQHBhcmFtIHtzdHJpbmcgfCBCdWZmZXJ9IGRhdGEgLSBUaGUgZGF0YSB0byBiZSB3cml0dGVuIHRvIHRoZSBmaWxlLlxuICogQHJldHVybiB7dm9pZH1cbiAqXG4gKiBAZnVuY3Rpb24gd3JpdGVGaWxlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVGaWxlKHBhdGg6IHN0cmluZywgZGF0YTogc3RyaW5nIHwgQnVmZmVyKTogdm9pZCB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3Iod3JpdGVGaWxlKTtcbiAgdHJ5IHtcbiAgICBsb2cudmVyYm9zZShgV3JpdGluZyBmaWxlIFwiJHtwYXRofSB3aXRoICR7ZGF0YS5sZW5ndGh9IGJ5dGVzLi4uYCk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLCBkYXRhLCBcInV0ZjhcIik7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgbG9nLnZlcmJvc2UoYEVycm9yIHdyaXRpbmcgZmlsZSBcIiR7cGF0aH1cIjogJHtlcnJvcn1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHdyaXRpbmcgZmlsZSBcIiR7cGF0aH1cIjogJHtlcnJvcn1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYWxsIGZpbGVzIHJlY3Vyc2l2ZWx5IGZyb20gYSBkaXJlY3RvcnkuXG4gKiBAc3VtbWFyeSBUcmF2ZXJzZXMgdGhyb3VnaCBkaXJlY3RvcmllcyBhbmQgc3ViZGlyZWN0b3JpZXMgdG8gY29sbGVjdCBhbGwgZmlsZSBwYXRocy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcCAtIFRoZSBwYXRoIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2ZpbHRlcl0gLSBPcHRpb25hbCBmdW5jdGlvbiB0byBmaWx0ZXIgZmlsZXMgYnkgbmFtZSBvciBpbmRleC5cbiAqIEByZXR1cm4ge3N0cmluZ1tdfSBBcnJheSBvZiBmaWxlIHBhdGhzLlxuICpcbiAqIEBmdW5jdGlvbiBnZXRBbGxGaWxlc1xuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbEZpbGVzKFxuICBwOiBzdHJpbmcsXG4gIGZpbHRlcj86IChmOiBzdHJpbmcsIGk/OiBudW1iZXIpID0+IGJvb2xlYW5cbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihnZXRBbGxGaWxlcyk7XG4gIGNvbnN0IGZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHRyeSB7XG4gICAgbG9nLnZlcmJvc2UoYFJldHJpZXZpbmcgYWxsIGZpbGVzIGZyb20gXCIke3B9XCIuLi5gKTtcbiAgICBjb25zdCBlbnRyaWVzID0gZnMucmVhZGRpclN5bmMocCk7XG5cbiAgICBlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihwLCBlbnRyeSk7XG4gICAgICBjb25zdCBzdGF0ID0gZnMuc3RhdFN5bmMoZnVsbFBhdGgpO1xuXG4gICAgICBpZiAoc3RhdC5pc0ZpbGUoKSkge1xuICAgICAgICBmaWxlcy5wdXNoKGZ1bGxQYXRoKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIGZpbGVzLnB1c2goLi4uZ2V0QWxsRmlsZXMoZnVsbFBhdGgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIWZpbHRlcikgcmV0dXJuIGZpbGVzO1xuICAgIHJldHVybiBmaWxlcy5maWx0ZXIoZmlsdGVyKTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBsb2cudmVyYm9zZShgRXJyb3IgcmV0cmlldmluZyBmaWxlcyBmcm9tIFwiJHtwfVwiOiAke2Vycm9yfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgcmV0cmlldmluZyBmaWxlcyBmcm9tIFwiJHtwfVwiOiAke2Vycm9yfWApO1xuICB9XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJlbmFtZXMgYSBmaWxlIG9yIGRpcmVjdG9yeS5cbiAqIEBzdW1tYXJ5IE1vdmVzIGEgZmlsZSBvciBkaXJlY3RvcnkgZnJvbSB0aGUgc291cmNlIHBhdGggdG8gdGhlIGRlc3RpbmF0aW9uIHBhdGguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIFRoZSBzb3VyY2UgcGF0aCBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdCAtIFRoZSBkZXN0aW5hdGlvbiBwYXRoIGZvciB0aGUgZmlsZSBvciBkaXJlY3RvcnkuXG4gKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSByZW5hbWUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICpcbiAqIEBmdW5jdGlvbiByZW5hbWVGaWxlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuYW1lRmlsZShzb3VyY2U6IHN0cmluZywgZGVzdDogc3RyaW5nKSB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IocmVuYW1lRmlsZSk7XG4gIGxldCBkZXNjcmlwdG9yU291cmNlLCBkZXNjcmlwdG9yRGVzdDtcblxuICB0cnkge1xuICAgIGRlc2NyaXB0b3JTb3VyY2UgPSBmcy5zdGF0U3luYyhzb3VyY2UpO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZy52ZXJib3NlKGBTb3VyY2UgcGF0aCBcIiR7c291cmNlfVwiIGRvZXMgbm90IGV4aXN0OiAke2Vycm9yfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihgU291cmNlIHBhdGggXCIke3NvdXJjZX1cIiBkb2VzIG5vdCBleGlzdDogJHtlcnJvcn1gKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgZGVzY3JpcHRvckRlc3QgPSBmcy5zdGF0U3luYyhkZXN0KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAvLyBkbyBub3RoaW5nLiBpdHMgb2tcbiAgfVxuICBpZiAoZGVzY3JpcHRvckRlc3QpIHtcbiAgICBsb2cudmVyYm9zZShgRGVzdGluYXRpb24gcGF0aCBcIiR7ZGVzdH1cIiBhbHJlYWR5IGV4aXN0c2ApO1xuICAgIHRocm93IG5ldyBFcnJvcihgRGVzdGluYXRpb24gcGF0aCBcIiR7ZGVzdH1cIiBhbHJlYWR5IGV4aXN0c2ApO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBSZW5hbWluZyAke2Rlc2NyaXB0b3JTb3VyY2UuaXNGaWxlKCkgPyBcImZpbGVcIiA6IFwiZGlyZWN0b3J5XCJ9IFwiJHtzb3VyY2V9XCIgdG8gXCIke2Rlc3R9Li4uYFxuICAgICk7XG4gICAgZnMucmVuYW1lU3luYyhzb3VyY2UsIGRlc3QpO1xuICAgIGxvZy52ZXJib3NlKGBTdWNjZXNzZnVsbHkgcmVuYW1lZCB0byBcIiR7ZGVzdH1cImApO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYEVycm9yIHJlbmFtaW5nICR7ZGVzY3JpcHRvclNvdXJjZS5pc0ZpbGUoKSA/IFwiZmlsZVwiIDogXCJkaXJlY3RvcnlcIn0gXCIke3NvdXJjZX1cIiB0byBcIiR7ZGVzdH1cIjogJHtlcnJvcn1gXG4gICAgKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRXJyb3IgcmVuYW1pbmcgJHtkZXNjcmlwdG9yU291cmNlLmlzRmlsZSgpID8gXCJmaWxlXCIgOiBcImRpcmVjdG9yeVwifSBcIiR7c291cmNlfVwiIHRvIFwiJHtkZXN0fVwiOiAke2Vycm9yfWBcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvcGllcyBhIGZpbGUgb3IgZGlyZWN0b3J5LlxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIGNvcHkgb2YgYSBmaWxlIG9yIGRpcmVjdG9yeSBmcm9tIHRoZSBzb3VyY2UgcGF0aCB0byB0aGUgZGVzdGluYXRpb24gcGF0aC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gVGhlIHNvdXJjZSBwYXRoIG9mIHRoZSBmaWxlIG9yIGRpcmVjdG9yeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkZXN0IC0gVGhlIGRlc3RpbmF0aW9uIHBhdGggZm9yIHRoZSBmaWxlIG9yIGRpcmVjdG9yeS5cbiAqIEByZXR1cm4ge3ZvaWR9XG4gKlxuICogQGZ1bmN0aW9uIGNvcHlGaWxlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weUZpbGUoc291cmNlOiBzdHJpbmcsIGRlc3Q6IHN0cmluZykge1xuICBjb25zdCBsb2cgPSBsb2dnZXIuZm9yKGNvcHlGaWxlKTtcbiAgbGV0IGRlc2NyaXB0b3JTb3VyY2UsIGRlc2NyaXB0b3JEZXN0O1xuICB0cnkge1xuICAgIGRlc2NyaXB0b3JTb3VyY2UgPSBmcy5zdGF0U3luYyhzb3VyY2UpO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZy52ZXJib3NlKGBTb3VyY2UgcGF0aCBcIiR7c291cmNlfVwiIGRvZXMgbm90IGV4aXN0OiAke2Vycm9yfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihgU291cmNlIHBhdGggXCIke3NvdXJjZX1cIiBkb2VzIG5vdCBleGlzdDogJHtlcnJvcn1gKTtcbiAgfVxuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBkZXNjcmlwdG9yRGVzdCA9IGZzLnN0YXRTeW5jKGRlc3QpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBpZiAoZGVzY3JpcHRvclNvdXJjZS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBsb2cudmVyYm9zZShgRGVzdCBwYXRoIFwiJHtkZXN0fVwiIGRvZXMgbm90IGV4aXN0LiBjcmVhdGluZ2ApO1xuICAgICAgZnMubWtkaXJTeW5jKGRlc3QsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgQ29weWluZyAke2Rlc2NyaXB0b3JTb3VyY2UuaXNGaWxlKCkgPyBcImZpbGVcIiA6IFwiZGlyZWN0b3J5XCJ9IFwiJHtzb3VyY2V9XCIgdG8gXCIke2Rlc3R9Li4uYFxuICAgICk7XG4gICAgZnMuY3BTeW5jKHNvdXJjZSwgZGVzdCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgRXJyb3IgY29weWluZyAke2Rlc2NyaXB0b3JTb3VyY2UuaXNGaWxlKCkgPyBcImZpbGVcIiA6IFwiZGlyZWN0b3J5XCJ9IFwiJHtzb3VyY2V9XCIgdG8gXCIke2Rlc3R9OiAke2Vycm9yfWBcbiAgICApO1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBFcnJvciBjb3B5aW5nICR7ZGVzY3JpcHRvclNvdXJjZS5pc0ZpbGUoKSA/IFwiZmlsZVwiIDogXCJkaXJlY3RvcnlcIn0gXCIke3NvdXJjZX1cIiB0byBcIiR7ZGVzdH06ICR7ZXJyb3J9YFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVsZXRlcyBhIGZpbGUgb3IgZGlyZWN0b3J5LlxuICogQHN1bW1hcnkgUmVtb3ZlcyBhIGZpbGUgb3IgZGlyZWN0b3J5IGF0IHRoZSBzcGVjaWZpZWQgcGF0aCwgd2l0aCByZWN1cnNpdmUgYW5kIGZvcmNlIG9wdGlvbnMgZW5hYmxlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcCAtIFRoZSBwYXRoIHRvIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSB0byBkZWxldGUuXG4gKiBAcmV0dXJuIHt2b2lkfVxuICpcbiAqIEBmdW5jdGlvbiBkZWxldGVQYXRoXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlUGF0aChwOiBzdHJpbmcpIHtcbiAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihkZWxldGVQYXRoKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gZnMuc3RhdFN5bmMocCk7XG4gICAgaWYgKGRlc2NyaXB0b3IuaXNGaWxlKCkpIHtcbiAgICAgIGxvZy52ZXJib3NlKGBEZWxldGluZyBmaWxlIFwiJHtwfS4uLmApO1xuICAgICAgZnMucm1TeW5jKHAsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IuaXNEaXJlY3RvcnkoKSlcbiAgICAgIGZzLnJtU3luYyhwLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgbG9nLnZlcmJvc2UoYEVycm9yIERlbGV0aW5nIFwiJHtwfVwiOiAke2Vycm9yfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgRGVsZXRpbmcgXCIke3B9XCI6ICR7ZXJyb3J9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIHBhY2thZ2UgaW5mb3JtYXRpb24gZnJvbSBwYWNrYWdlLmpzb24uXG4gKiBAc3VtbWFyeSBMb2FkcyBhbmQgcGFyc2VzIHRoZSBwYWNrYWdlLmpzb24gZmlsZSBmcm9tIGEgc3BlY2lmaWVkIGRpcmVjdG9yeSBvciB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gQ2FuIHJldHVybiB0aGUgZW50aXJlIHBhY2thZ2Ugb2JqZWN0IG9yIGEgc3BlY2lmaWMgcHJvcGVydHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gW3A9cHJvY2Vzcy5jd2QoKV0gLSBUaGUgZGlyZWN0b3J5IHBhdGggd2hlcmUgdGhlIHBhY2thZ2UuanNvbiBmaWxlIGlzIGxvY2F0ZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gW3Byb3BlcnR5XSAtIE9wdGlvbmFsLiBUaGUgc3BlY2lmaWMgcHJvcGVydHkgdG8gcmV0cmlldmUgZnJvbSBwYWNrYWdlLmpzb24uXG4gKiBAcmV0dXJuIHtvYmplY3QgfCBzdHJpbmd9IFRoZSBwYXJzZWQgY29udGVudHMgb2YgcGFja2FnZS5qc29uIG9yIHRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIHByb3BlcnR5LlxuICogQGZ1bmN0aW9uIGdldFBhY2thZ2VcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gKiAgIHBhcnRpY2lwYW50IGdldFBhY2thZ2VcbiAqICAgcGFydGljaXBhbnQgcmVhZEZpbGVcbiAqICAgcGFydGljaXBhbnQgSlNPTlxuICogICBDYWxsZXItPj5nZXRQYWNrYWdlOiBDYWxsIHdpdGggcGF0aCBhbmQgb3B0aW9uYWwgcHJvcGVydHlcbiAqICAgZ2V0UGFja2FnZS0+PnJlYWRGaWxlOiBSZWFkIHBhY2thZ2UuanNvblxuICogICByZWFkRmlsZS0tPj5nZXRQYWNrYWdlOiBSZXR1cm4gZmlsZSBjb250ZW50XG4gKiAgIGdldFBhY2thZ2UtPj5KU09OOiBQYXJzZSBmaWxlIGNvbnRlbnRcbiAqICAgSlNPTi0tPj5nZXRQYWNrYWdlOiBSZXR1cm4gcGFyc2VkIG9iamVjdFxuICogICBhbHQgcHJvcGVydHkgc3BlY2lmaWVkXG4gKiAgICAgZ2V0UGFja2FnZS0+PmdldFBhY2thZ2U6IENoZWNrIGlmIHByb3BlcnR5IGV4aXN0c1xuICogICAgIGFsdCBwcm9wZXJ0eSBleGlzdHNcbiAqICAgICAgIGdldFBhY2thZ2UtLT4+Q2FsbGVyOiBSZXR1cm4gcHJvcGVydHkgdmFsdWVcbiAqICAgICBlbHNlIHByb3BlcnR5IGRvZXNuJ3QgZXhpc3RcbiAqICAgICAgIGdldFBhY2thZ2UtLT4+Q2FsbGVyOiBUaHJvdyBFcnJvclxuICogICAgIGVuZFxuICogICBlbHNlIG5vIHByb3BlcnR5IHNwZWNpZmllZFxuICogICAgIGdldFBhY2thZ2UtLT4+Q2FsbGVyOiBSZXR1cm4gZW50aXJlIHBhY2thZ2Ugb2JqZWN0XG4gKiAgIGVuZFxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFja2FnZShcbiAgcDogc3RyaW5nID0gcHJvY2Vzcy5jd2QoKSxcbiAgcHJvcGVydHk/OiBzdHJpbmdcbik6IG9iamVjdCB8IHN0cmluZyB7XG4gIGxldCBwa2c6IGFueTtcbiAgdHJ5IHtcbiAgICBwa2cgPSBKU09OLnBhcnNlKHJlYWRGaWxlKHBhdGguam9pbihwLCBgcGFja2FnZS5qc29uYCkpKTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byByZXRyaWV2ZSBwYWNrYWdlIGluZm9ybWF0aW9uXCIgJHtlcnJvcn1gKTtcbiAgfVxuXG4gIGlmIChwcm9wZXJ0eSkge1xuICAgIGlmICghKHByb3BlcnR5IGluIHBrZykpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3BlcnR5IFwiJHtwcm9wZXJ0eX1cIiBub3QgZm91bmQgaW4gcGFja2FnZS5qc29uYCk7XG4gICAgcmV0dXJuIHBrZ1twcm9wZXJ0eV0gYXMgc3RyaW5nO1xuICB9XG4gIHJldHVybiBwa2c7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFNldHMgYW4gYXR0cmlidXRlIGluIHRoZSBwYWNrYWdlLmpzb24gZmlsZS5cbiAqIEBzdW1tYXJ5IFVwZGF0ZXMgYSBzcGVjaWZpYyBhdHRyaWJ1dGUgaW4gdGhlIHBhY2thZ2UuanNvbiBmaWxlIHdpdGggdGhlIHByb3ZpZGVkIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyIC0gVGhlIGF0dHJpYnV0ZSBuYW1lIHRvIHNldCBpbiBwYWNrYWdlLmpzb24uXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IG9iamVjdH0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0IGZvciB0aGUgYXR0cmlidXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtwPXByb2Nlc3MuY3dkKCldIC0gVGhlIGRpcmVjdG9yeSBwYXRoIHdoZXJlIHRoZSBwYWNrYWdlLmpzb24gZmlsZSBpcyBsb2NhdGVkLlxuICogQHJldHVybiB7dm9pZH1cbiAqXG4gKiBAZnVuY3Rpb24gc2V0UGFja2FnZUF0dHJpYnV0ZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBhY2thZ2VBdHRyaWJ1dGUoXG4gIGF0dHI6IHN0cmluZyxcbiAgdmFsdWU6IHN0cmluZyxcbiAgcDogc3RyaW5nID0gcHJvY2Vzcy5jd2QoKVxuKTogdm9pZCB7XG4gIGNvbnN0IHBrZyA9IGdldFBhY2thZ2UocCkgYXMgUmVjb3JkPHN0cmluZywgYW55PjtcbiAgcGtnW2F0dHJdID0gdmFsdWU7XG4gIHdyaXRlRmlsZShwYXRoLmpvaW4ocCwgYHBhY2thZ2UuanNvbmApLCBKU09OLnN0cmluZ2lmeShwa2csIG51bGwsIDIpKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIHRoZSB2ZXJzaW9uIGZyb20gcGFja2FnZS5qc29uLlxuICogQHN1bW1hcnkgQSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0aGF0IGNhbGxzIGdldFBhY2thZ2UgdG8gcmV0cmlldmUgdGhlIFwidmVyc2lvblwiIHByb3BlcnR5IGZyb20gcGFja2FnZS5qc29uLlxuICogQHBhcmFtIHtzdHJpbmd9IFtwPXByb2Nlc3MuY3dkKCldIC0gVGhlIGRpcmVjdG9yeSBwYXRoIHdoZXJlIHRoZSBwYWNrYWdlLmpzb24gZmlsZSBpcyBsb2NhdGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgdmVyc2lvbiBzdHJpbmcgZnJvbSBwYWNrYWdlLmpzb24uXG4gKiBAZnVuY3Rpb24gZ2V0UGFja2FnZVZlcnNpb25cbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhY2thZ2VWZXJzaW9uKHAgPSBwcm9jZXNzLmN3ZCgpKTogc3RyaW5nIHtcbiAgcmV0dXJuIGdldFBhY2thZ2UocCwgXCJ2ZXJzaW9uXCIpIGFzIHN0cmluZztcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGFsbCBkZXBlbmRlbmNpZXMgZnJvbSB0aGUgcHJvamVjdC5cbiAqIEBzdW1tYXJ5IEV4ZWN1dGVzICducG0gbHMgLS1qc29uJyBjb21tYW5kIHRvIGdldCBhIGRldGFpbGVkIGxpc3Qgb2YgYWxsIGRlcGVuZGVuY2llcyAocHJvZHVjdGlvbiwgZGV2ZWxvcG1lbnQsIGFuZCBwZWVyKSBhbmQgdGhlaXIgdmVyc2lvbnMuXG4gKiBAcGFyYW0ge3N0cmluZ30gW3BhdGg9cHJvY2Vzcy5jd2QoKV0gLSBUaGUgZGlyZWN0b3J5IHBhdGggb2YgdGhlIHByb2plY3QuXG4gKiBAcmV0dXJuIHtQcm9taXNlPHtwcm9kOiBBcnJheTx7bmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmd9PiwgZGV2OiBBcnJheTx7bmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmd9PiwgcGVlcjogQXJyYXk8e25hbWU6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nfT59Pn0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgYXJyYXlzIG9mIHByb2R1Y3Rpb24sIGRldmVsb3BtZW50LCBhbmQgcGVlciBkZXBlbmRlbmNpZXMuXG4gKiBAZnVuY3Rpb24gZ2V0RGVwZW5kZW5jaWVzXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICogICBwYXJ0aWNpcGFudCBnZXREZXBlbmRlbmNpZXNcbiAqICAgcGFydGljaXBhbnQgcnVuQ29tbWFuZFxuICogICBwYXJ0aWNpcGFudCBKU09OXG4gKiAgIENhbGxlci0+PmdldERlcGVuZGVuY2llczogQ2FsbCB3aXRoIG9wdGlvbmFsIHBhdGhcbiAqICAgZ2V0RGVwZW5kZW5jaWVzLT4+cnVuQ29tbWFuZDogRXhlY3V0ZSAnbnBtIGxzIC0tanNvbidcbiAqICAgcnVuQ29tbWFuZC0tPj5nZXREZXBlbmRlbmNpZXM6IFJldHVybiBjb21tYW5kIG91dHB1dFxuICogICBnZXREZXBlbmRlbmNpZXMtPj5KU09OOiBQYXJzZSBjb21tYW5kIG91dHB1dFxuICogICBKU09OLS0+PmdldERlcGVuZGVuY2llczogUmV0dXJuIHBhcnNlZCBvYmplY3RcbiAqICAgZ2V0RGVwZW5kZW5jaWVzLT4+Z2V0RGVwZW5kZW5jaWVzOiBQcm9jZXNzIGRlcGVuZGVuY2llc1xuICogICBnZXREZXBlbmRlbmNpZXMtLT4+Q2FsbGVyOiBSZXR1cm4gcHJvY2Vzc2VkIGRlcGVuZGVuY2llc1xuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RGVwZW5kZW5jaWVzKFxuICBwYXRoOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpXG4pOiBQcm9taXNlPERlcGVuZGVuY3lNYXA+IHtcbiAgbGV0IHBrZzogYW55O1xuXG4gIHRyeSB7XG4gICAgcGtnID0gSlNPTi5wYXJzZShhd2FpdCBydW5Db21tYW5kKGBucG0gbHMgLS1qc29uYCwgeyBjd2Q6IHBhdGggfSkucHJvbWlzZSk7XG4gIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byByZXRyaWV2ZSBkZXBlbmRlbmNpZXM6ICR7ZX1gKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgY29uc3QgbWFwcGVyID0gKGVudHJ5OiBbc3RyaW5nLCB1bmtub3duXSwgaW5kZXg6IG51bWJlcikgPT4gKHtcbiAgICBuYW1lOiBlbnRyeVswXSxcbiAgICB2ZXJzaW9uOiAoZW50cnlbMV0gYXMgYW55KS52ZXJzaW9uLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHByb2Q6IE9iamVjdC5lbnRyaWVzKHBrZy5kZXBlbmRlbmNpZXMgfHwge30pLm1hcChtYXBwZXIpLFxuICAgIGRldjogT2JqZWN0LmVudHJpZXMocGtnLmRldkRlcGVuZGVuY2llcyB8fCB7fSkubWFwKG1hcHBlciksXG4gICAgcGVlcjogT2JqZWN0LmVudHJpZXMocGtnLnBlZXJEZXBlbmRlbmNpZXMgfHwge30pLm1hcChtYXBwZXIpLFxuICB9O1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBVcGRhdGVzIHByb2plY3QgZGVwZW5kZW5jaWVzIHRvIHRoZWlyIGxhdGVzdCB2ZXJzaW9ucy5cbiAqIEBzdW1tYXJ5IFJ1bnMgbnBtLWNoZWNrLXVwZGF0ZXMgdG8gdXBkYXRlIHBhY2thZ2UuanNvbiBhbmQgdGhlbiBpbnN0YWxscyB0aGUgdXBkYXRlZCBkZXBlbmRlbmNpZXMuXG4gKlxuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBkZXBlbmRlbmNpZXMgYXJlIHVwZGF0ZWQuXG4gKlxuICogQGZ1bmN0aW9uIHVwZGF0ZURlcGVuZGVuY2llc1xuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZURlcGVuZGVuY2llcygpIHtcbiAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcih1cGRhdGVEZXBlbmRlbmNpZXMpO1xuICBsb2cuaW5mbyhcImNoZWNraW5nIGZvciB1cGRhdGVzLi4uXCIpO1xuICBhd2FpdCBydW5Db21tYW5kKFwibnB4IG5wbS1jaGVjay11cGRhdGVzIC11XCIpLnByb21pc2U7XG4gIGxvZy5pbmZvKFwidXBkYXRpbmcuLi5cIik7XG4gIGF3YWl0IHJ1bkNvbW1hbmQoXCJucHggbnBtIHJ1biBkby1pbnN0YWxsXCIpLnByb21pc2U7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEluc3RhbGxzIGRlcGVuZGVuY2llcyBpZiB0aGV5IGFyZSBub3QgYWxyZWFkeSBhdmFpbGFibGUuXG4gKiBAc3VtbWFyeSBDaGVja3MgaWYgc3BlY2lmaWVkIGRlcGVuZGVuY2llcyBhcmUgaW5zdGFsbGVkIGFuZCBpbnN0YWxscyBhbnkgdGhhdCBhcmUgbWlzc2luZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgc3RyaW5nfSBkZXBzIC0gVGhlIGRlcGVuZGVuY2llcyB0byBjaGVjayBhbmQgcG90ZW50aWFsbHkgaW5zdGFsbC5cbiAqIEBwYXJhbSB7U2ltcGxlRGVwZW5kZW5jeU1hcH0gW2RlcGVuZGVuY2llc10gLSBPcHRpb25hbCBtYXAgb2YgZXhpc3RpbmcgZGVwZW5kZW5jaWVzLlxuICogQHJldHVybiB7UHJvbWlzZTxTaW1wbGVEZXBlbmRlbmN5TWFwPn0gVXBkYXRlZCBtYXAgb2YgZGVwZW5kZW5jaWVzLlxuICpcbiAqIEBmdW5jdGlvbiBpbnN0YWxsSWZOb3RBdmFpbGFibGVcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnN0YWxsSWZOb3RBdmFpbGFibGUoXG4gIGRlcHM6IHN0cmluZ1tdIHwgc3RyaW5nLFxuICBkZXBlbmRlbmNpZXM/OiBTaW1wbGVEZXBlbmRlbmN5TWFwXG4pIHtcbiAgaWYgKCFkZXBlbmRlbmNpZXMpIHtcbiAgICBjb25zdCBkOiBEZXBlbmRlbmN5TWFwID0gYXdhaXQgZ2V0RGVwZW5kZW5jaWVzKCk7XG4gICAgZGVwZW5kZW5jaWVzID0ge1xuICAgICAgcHJvZDogZC5wcm9kPy5tYXAoKHApID0+IHAubmFtZSkgfHwgW10sXG4gICAgICBkZXY6IGQuZGV2Py5tYXAoKGQpID0+IGQubmFtZSkgfHwgW10sXG4gICAgICBwZWVyOiBkLnBlZXI/Lm1hcCgocCkgPT4gcC5uYW1lKSB8fCBbXSxcbiAgICB9O1xuICB9XG4gIGNvbnN0IHsgcHJvZCwgZGV2LCBwZWVyIH0gPSBkZXBlbmRlbmNpZXM7XG4gIGNvbnN0IGluc3RhbGxlZCA9IEFycmF5LmZyb20oXG4gICAgbmV3IFNldChbLi4uKHByb2QgfHwgW10pLCAuLi4oZGV2IHx8IFtdKSwgLi4uKHBlZXIgfHwgW10pXSlcbiAgKTtcbiAgZGVwcyA9IHR5cGVvZiBkZXBzID09PSBcInN0cmluZ1wiID8gW2RlcHNdIDogZGVwcztcbiAgY29uc3QgdG9JbnN0YWxsID0gZGVwcy5maWx0ZXIoKGQpID0+ICFpbnN0YWxsZWQuaW5jbHVkZXMoZCkpO1xuXG4gIGlmICh0b0luc3RhbGwubGVuZ3RoKSBhd2FpdCBpbnN0YWxsRGVwZW5kZW5jaWVzKHsgZGV2OiB0b0luc3RhbGwgfSk7XG4gIGRlcGVuZGVuY2llcy5kZXYgPSBkZXBlbmRlbmNpZXMuZGV2IHx8IFtdO1xuICBkZXBlbmRlbmNpZXMuZGV2LnB1c2goLi4udG9JbnN0YWxsKTtcbiAgcmV0dXJuIGRlcGVuZGVuY2llcztcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUHVzaGVzIGNoYW5nZXMgdG8gR2l0IHJlcG9zaXRvcnkuXG4gKiBAc3VtbWFyeSBUZW1wb3JhcmlseSBjaGFuZ2VzIEdpdCB1c2VyIGNvbmZpZ3VyYXRpb24sIGNvbW1pdHMgYWxsIGNoYW5nZXMsIHB1c2hlcyB0byByZW1vdGUsIGFuZCByZXN0b3JlcyBvcmlnaW5hbCB1c2VyIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBjaGFuZ2VzIGFyZSBwdXNoZWQuXG4gKlxuICogQGZ1bmN0aW9uIHB1c2hUb0dpdFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHB1c2hUb0dpdCgpIHtcbiAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihwdXNoVG9HaXQpO1xuICBjb25zdCBnaXRVc2VyID0gYXdhaXQgcnVuQ29tbWFuZChcImdpdCBjb25maWcgdXNlci5uYW1lXCIpLnByb21pc2U7XG4gIGNvbnN0IGdpdEVtYWlsID0gYXdhaXQgcnVuQ29tbWFuZChcImdpdCBjb25maWcgdXNlci5lbWFpbFwiKS5wcm9taXNlO1xuICBsb2cudmVyYm9zZShgY2FjaGVkIGdpdCBpZDogJHtnaXRVc2VyfS8ke2dpdEVtYWlsfS4gY2hhbmdpbmcgdG8gYXV0b21hdGlvbmApO1xuICBhd2FpdCBydW5Db21tYW5kKCdnaXQgY29uZmlnIHVzZXIuZW1haWwgXCJhdXRvbWF0aW9uQGRlY2FmLnRzXCInKS5wcm9taXNlO1xuICBhd2FpdCBydW5Db21tYW5kKCdnaXQgY29uZmlnIHVzZXIubmFtZSBcImRlY2FmXCInKS5wcm9taXNlO1xuICBsb2cuaW5mbyhcIlB1c2hpbmcgY2hhbmdlcyB0byBnaXQuLi5cIik7XG4gIGF3YWl0IHJ1bkNvbW1hbmQoXCJnaXQgYWRkIC5cIikucHJvbWlzZTtcbiAgYXdhaXQgcnVuQ29tbWFuZChgZ2l0IGNvbW1pdCAtbSBcInJlZnMgIzEgLSBhZnRlciByZXBvIHNldHVwXCJgKS5wcm9taXNlO1xuICBhd2FpdCBydW5Db21tYW5kKFwiZ2l0IHB1c2hcIikucHJvbWlzZTtcbiAgYXdhaXQgcnVuQ29tbWFuZChgZ2l0IGNvbmZpZyB1c2VyLmVtYWlsIFwiJHtnaXRFbWFpbH1cImApLnByb21pc2U7XG4gIGF3YWl0IHJ1bkNvbW1hbmQoYGdpdCBjb25maWcgdXNlci5uYW1lIFwiJHtnaXRVc2VyfVwiYCkucHJvbWlzZTtcbiAgbG9nLnZlcmJvc2UoYHJldmVydGVkIHRvIGdpdCBpZDogJHtnaXRVc2VyfS8ke2dpdEVtYWlsfWApO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBJbnN0YWxscyBwcm9qZWN0IGRlcGVuZGVuY2llcy5cbiAqIEBzdW1tYXJ5IEluc3RhbGxzIHByb2R1Y3Rpb24sIGRldmVsb3BtZW50LCBhbmQgcGVlciBkZXBlbmRlbmNpZXMgYXMgc3BlY2lmaWVkLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBkZXBlbmRlbmNpZXMgLSBPYmplY3QgY29udGFpbmluZyBhcnJheXMgb2YgZGVwZW5kZW5jaWVzIHRvIGluc3RhbGwuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBbZGVwZW5kZW5jaWVzLnByb2RdIC0gUHJvZHVjdGlvbiBkZXBlbmRlbmNpZXMgdG8gaW5zdGFsbC5cbiAqIEBwYXJhbSB7c3RyaW5nW119IFtkZXBlbmRlbmNpZXMuZGV2XSAtIERldmVsb3BtZW50IGRlcGVuZGVuY2llcyB0byBpbnN0YWxsLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gW2RlcGVuZGVuY2llcy5wZWVyXSAtIFBlZXIgZGVwZW5kZW5jaWVzIHRvIGluc3RhbGwuXG4gKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGFsbCBkZXBlbmRlbmNpZXMgYXJlIGluc3RhbGxlZC5cbiAqXG4gKiBAZnVuY3Rpb24gaW5zdGFsbERlcGVuZGVuY2llc1xuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxEZXBlbmRlbmNpZXMoZGVwZW5kZW5jaWVzOiB7XG4gIHByb2Q/OiBzdHJpbmdbXTtcbiAgZGV2Pzogc3RyaW5nW107XG4gIHBlZXI/OiBzdHJpbmdbXTtcbn0pIHtcbiAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihpbnN0YWxsRGVwZW5kZW5jaWVzKTtcbiAgY29uc3QgcHJvZCA9IGRlcGVuZGVuY2llcy5wcm9kIHx8IFtdO1xuICBjb25zdCBkZXYgPSBkZXBlbmRlbmNpZXMuZGV2IHx8IFtdO1xuICBjb25zdCBwZWVyID0gZGVwZW5kZW5jaWVzLnBlZXIgfHwgW107XG4gIGlmIChwcm9kLmxlbmd0aCkge1xuICAgIGxvZy5pbmZvKGBJbnN0YWxsaW5nIGRlcGVuZGVuY2llcyAke3Byb2Quam9pbihcIiwgXCIpfS4uLmApO1xuICAgIGF3YWl0IHJ1bkNvbW1hbmQoYG5wbSBpbnN0YWxsICR7cHJvZC5qb2luKFwiIFwiKX1gLCB7IGN3ZDogcHJvY2Vzcy5jd2QoKSB9KVxuICAgICAgLnByb21pc2U7XG4gIH1cbiAgaWYgKGRldi5sZW5ndGgpIHtcbiAgICBsb2cuaW5mbyhgSW5zdGFsbGluZyBkZXZEZXBlbmRlbmNpZXMgJHtkZXYuam9pbihcIiwgXCIpfS4uLmApO1xuICAgIGF3YWl0IHJ1bkNvbW1hbmQoYG5wbSBpbnN0YWxsIC0tc2F2ZS1kZXYgJHtkZXYuam9pbihcIiBcIil9YCwge1xuICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgIH0pLnByb21pc2U7XG4gIH1cbiAgaWYgKHBlZXIubGVuZ3RoKSB7XG4gICAgbG9nLmluZm8oYEluc3RhbGxpbmcgcGVlckRlcGVuZGVuY2llcyAke3BlZXIuam9pbihcIiwgXCIpfS4uLmApO1xuICAgIGF3YWl0IHJ1bkNvbW1hbmQoYG5wbSBpbnN0YWxsIC0tc2F2ZS1wZWVyICR7cGVlci5qb2luKFwiIFwiKX1gLCB7XG4gICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgfSkucHJvbWlzZTtcbiAgfVxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBOb3JtYWxpemVzIGltcG9ydHMgdG8gaGFuZGxlIGJvdGggQ29tbW9uSlMgYW5kIEVTTW9kdWxlIGZvcm1hdHMuXG4gKiBAc3VtbWFyeSBVdGlsaXR5IGZ1bmN0aW9uIHRvIGhhbmRsZSBtb2R1bGUgaW1wb3J0IGRpZmZlcmVuY2VzIGJldHdlZW4gZm9ybWF0cy5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFR5cGUgb2YgdGhlIGltcG9ydGVkIG1vZHVsZS5cbiAqIEBwYXJhbSB7UHJvbWlzZTxUPn0gaW1wb3J0UHJvbWlzZSAtIFByb21pc2UgcmV0dXJuZWQgYnkgZHluYW1pYyBpbXBvcnQuXG4gKiBAcmV0dXJuIHtQcm9taXNlPFQ+fSBOb3JtYWxpemVkIG1vZHVsZS5cbiAqXG4gKiBAZnVuY3Rpb24gbm9ybWFsaXplSW1wb3J0XG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbm9ybWFsaXplSW1wb3J0PFQ+KFxuICBpbXBvcnRQcm9taXNlOiBQcm9taXNlPFQ+XG4pOiBQcm9taXNlPFQ+IHtcbiAgLy8gQ29tbW9uSlMncyBgbW9kdWxlLmV4cG9ydHNgIGlzIHdyYXBwZWQgYXMgYGRlZmF1bHRgIGluIEVTTW9kdWxlLlxuICByZXR1cm4gaW1wb3J0UHJvbWlzZS50aGVuKChtOiBhbnkpID0+IChtLmRlZmF1bHQgfHwgbSkgYXMgVCk7XG59XG4iLCJpbXBvcnQgc2xvZ2FucyBmcm9tIFwiLi4vYXNzZXRzL3Nsb2dhbnMuanNvblwiO1xuaW1wb3J0IHsgc3R5bGUgfSBmcm9tIFwic3R5bGVkLXN0cmluZy1idWlsZGVyXCI7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQXJyYXkgb2YgQU5TSSBjb2xvciBjb2RlcyBmb3IgYmFubmVyIHN0eWxpbmcuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgc2V0IG9mIEFOU0kgY29sb3IgY29kZXMgdXNlZCB0byBzdHlsZSB0aGUgYmFubmVyIHRleHQuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmNvbnN0IGNvbG9ycyA9IFtcbiAgXCJcXHgxYlszODs1OzIxNW1cIiwgLy8gc29mdCBvcmFuZ2VcbiAgXCJcXHgxYlszODs1OzIwOW1cIiwgLy8gY29yYWxcbiAgXCJcXHgxYlszODs1OzIwNW1cIiwgLy8gcGlua1xuICBcIlxceDFiWzM4OzU7MjEwbVwiLCAvLyBwZWFjaHlcbiAgXCJcXHgxYlszODs1OzIxN21cIiwgLy8gc2FsbW9uXG4gIFwiXFx4MWJbMzg7NTsyMTZtXCIsIC8vIGxpZ2h0IGNvcmFsXG4gIFwiXFx4MWJbMzg7NTsyMjRtXCIsIC8vIGxpZ2h0IHBlYWNoXG4gIFwiXFx4MWJbMzg7NTsyMzBtXCIsIC8vIHNvZnQgY3JlYW1cbiAgXCJcXHgxYlszODs1OzIzMG1cIiwgLy8gc29mdCBjcmVhbVxuXTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUHJpbnRzIGEgc3R5bGVkIGJhbm5lciB0byB0aGUgY29uc29sZS5cbiAqIEBzdW1tYXJ5IEdlbmVyYXRlcyBhbmQgcHJpbnRzIGEgY29sb3JmdWwgQVNDSUkgYXJ0IGJhbm5lciB3aXRoIGEgcmFuZG9tIHNsb2dhbi5cbiAqIEBwYXJhbSB7TG9nZ2VyfSBbbG9nZ2VyXSAtIE9wdGlvbmFsIGxvZ2dlciBmb3IgdmVyYm9zZSBvdXRwdXQuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKiBAZnVuY3Rpb24gcHJpbnRCYW5uZXJcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgcHJpbnRCYW5uZXJcbiAqICAgcGFydGljaXBhbnQgZ2V0U2xvZ2FuXG4gKiAgIHBhcnRpY2lwYW50IHBhZEVuZFxuICogICBwYXJ0aWNpcGFudCBjb25zb2xlXG4gKiAgIHByaW50QmFubmVyLT4+Z2V0U2xvZ2FuOiBDYWxsIGdldFNsb2dhbigpXG4gKiAgIGdldFNsb2dhbi0tPj5wcmludEJhbm5lcjogUmV0dXJuIHJhbmRvbSBzbG9nYW5cbiAqICAgcHJpbnRCYW5uZXItPj5wcmludEJhbm5lcjogQ3JlYXRlIGJhbm5lciBBU0NJSSBhcnRcbiAqICAgcHJpbnRCYW5uZXItPj5wcmludEJhbm5lcjogU3BsaXQgYmFubmVyIGludG8gbGluZXNcbiAqICAgcHJpbnRCYW5uZXItPj5wcmludEJhbm5lcjogQ2FsY3VsYXRlIG1heCBsaW5lIGxlbmd0aFxuICogICBwcmludEJhbm5lci0+PnBhZEVuZDogQ2FsbCBwYWRFbmQgd2l0aCBzbG9nYW5cbiAqICAgcGFkRW5kLS0+PnByaW50QmFubmVyOiBSZXR1cm4gcGFkZGVkIHNsb2dhbiBsaW5lXG4gKiAgIGxvb3AgRm9yIGVhY2ggYmFubmVyIGxpbmVcbiAqICAgICBwcmludEJhbm5lci0+PnN0eWxlOiBDYWxsIHN0eWxlKGxpbmUpXG4gKiAgICAgc3R5bGUtLT4+cHJpbnRCYW5uZXI6IFJldHVybiBzdHlsZWQgbGluZVxuICogICAgIHByaW50QmFubmVyLT4+Y29uc29sZTogTG9nIHN0eWxlZCBsaW5lXG4gKiAgIGVuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRCYW5uZXIobG9nZ2VyPzogTG9nZ2VyKSB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBnZXRTbG9nYW4oKTtcbiAgY29uc3QgYmFubmVyOiBzdHJpbmcgfCBzdHJpbmdbXSA9XG4gICAgYCMgICAgICAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRICDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgICDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAgICAgICDilpHilpLilpPilojilojilojilojilojilojilojilojilpPilpLilpEgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSBcbiMgICAgICAoICggICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgXG4jICAgICAgICkgKSAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICAgICBcbiMgICAgWz09PT09PT1dICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgICDilpHilpLilpPilojilpPilpLilpEgICAgICAgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgICDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgIFxuIyAgICAgXFxgLS0tLS3CtCAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgXG4jICAgICAgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRIFxuIyAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRICDilpHilpLilpPilojilojilojilojilojilojilojilojilpPilpLilpEgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICDilpHilpLilpPilojilojilojilojilojilojilojilpPilpLilpEgIFxuI2Auc3BsaXQoXCJcXG5cIik7XG4gIGNvbnN0IG1heExlbmd0aCA9IGJhbm5lci5yZWR1Y2UoKG1heCwgbGluZSkgPT4gTWF0aC5tYXgobWF4LCBsaW5lLmxlbmd0aCksIDApO1xuICBiYW5uZXIucHVzaChgIyAgJHttZXNzYWdlLnBhZFN0YXJ0KG1heExlbmd0aCAtIDMpfWApO1xuICBiYW5uZXIuZm9yRWFjaCgobGluZSwgaW5kZXgpID0+IHtcbiAgICAobG9nZ2VyID8gbG9nZ2VyLmluZm8uYmluZChsb2dnZXIpIDogY29uc29sZS5sb2cuYmluZChjb25zb2xlKSkoXG4gICAgICBzdHlsZShsaW5lIHx8IFwiXCIpLnJhdyhjb2xvcnNbaW5kZXhdKS50ZXh0XG4gICAgKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhIHNsb2dhbiBmcm9tIHRoZSBwcmVkZWZpbmVkIGxpc3QuXG4gKiBAc3VtbWFyeSBGZXRjaGVzIGEgcmFuZG9tIHNsb2dhbiBvciBhIHNwZWNpZmljIG9uZSBieSBpbmRleCBmcm9tIHRoZSBzbG9nYW5zIGxpc3QuXG4gKiBAcGFyYW0ge251bWJlcn0gW2ldIC0gT3B0aW9uYWwgaW5kZXggdG8gcmV0cmlldmUgYSBzcGVjaWZpYyBzbG9nYW4uXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzZWxlY3RlZCBzbG9nYW4uXG4gKiBAZnVuY3Rpb24gZ2V0U2xvZ2FuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IGdldFNsb2dhblxuICogICBwYXJ0aWNpcGFudCBNYXRoLnJhbmRvbVxuICogICBwYXJ0aWNpcGFudCBzbG9nYW5zXG4gKiAgIGFsdCBpIGlzIHVuZGVmaW5lZFxuICogICAgIGdldFNsb2dhbi0+Pk1hdGgucmFuZG9tOiBHZW5lcmF0ZSByYW5kb20gaW5kZXhcbiAqICAgICBNYXRoLnJhbmRvbS0tPj5nZXRTbG9nYW46IFJldHVybiByYW5kb20gaW5kZXhcbiAqICAgZWxzZSBpIGlzIGRlZmluZWRcbiAqICAgICBOb3RlIG92ZXIgZ2V0U2xvZ2FuOiBVc2UgcHJvdmlkZWQgaW5kZXhcbiAqICAgZW5kXG4gKiAgIGdldFNsb2dhbi0+PnNsb2dhbnM6IEFjY2VzcyBzbG9nYW4gYXQgaW5kZXhcbiAqICAgc2xvZ2Fucy0tPj5nZXRTbG9nYW46IFJldHVybiBzbG9nYW5cbiAqICAgYWx0IEVycm9yIG9jY3Vyc1xuICogICAgIGdldFNsb2dhbi0+PmdldFNsb2dhbjogVGhyb3cgZXJyb3JcbiAqICAgZW5kXG4gKiAgIGdldFNsb2dhbi0tPj5DYWxsZXI6IFJldHVybiBzbG9nYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNsb2dhbihpPzogbnVtYmVyKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBpID1cbiAgICAgIHR5cGVvZiBpID09PSBcInVuZGVmaW5lZFwiID8gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogc2xvZ2Fucy5sZW5ndGgpIDogaTtcbiAgICByZXR1cm4gc2xvZ2Fuc1tpXS5TbG9nYW47XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcmV0cmlldmUgc2xvZ2FuczogJHtlcnJvcn1gKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBAZGVzY3JpcHRpb24gRGV0ZXJtaW5lcyBpZiB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyBhIGJyb3dzZXIgYnkgY2hlY2tpbmcgdGhlIHByb3RvdHlwZSBjaGFpbiBvZiB0aGUgZ2xvYmFsIG9iamVjdC5cbiAqIEBzdW1tYXJ5IENoZWNrcyBpZiB0aGUgY29kZSBpcyBydW5uaW5nIGluIGEgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGVudmlyb25tZW50IGlzIGEgYnJvd3NlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuICogQGZ1bmN0aW9uIGlzQnJvd3NlclxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNCcm93c2VyKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihPYmplY3QuZ2V0UHJvdG90eXBlT2YoZ2xvYmFsVGhpcykpICE9PVxuICAgIE9iamVjdC5wcm90b3R5cGVcbiAgKTtcbn1cbiIsIi8qKlxuICogQGNsYXNzIE9iamVjdEFjY3VtdWxhdG9yXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIHRoZSBhY2N1bXVsYXRlZCBvYmplY3QsIGV4dGVuZHMgb2JqZWN0XG4gKiBAZGVzY3JpcHRpb24gQSBjbGFzcyB0aGF0IGFjY3VtdWxhdGVzIG9iamVjdHMgYW5kIHByb3ZpZGVzIHR5cGUtc2FmZSBhY2Nlc3MgdG8gdGhlaXIgcHJvcGVydGllcy5cbiAqIEl0IGFsbG93cyBmb3IgZHluYW1pYyBhZGRpdGlvbiBvZiBwcm9wZXJ0aWVzIHdoaWxlIG1haW50YWluaW5nIHR5cGUgaW5mb3JtYXRpb24uXG4gKiBAc3VtbWFyeSBBY2N1bXVsYXRlcyBvYmplY3RzIGFuZCBtYWludGFpbnMgdHlwZSBpbmZvcm1hdGlvbiBmb3IgYWNjdW11bGF0ZWQgcHJvcGVydGllc1xuICogQG1lbWJlck9mIHV0aWxzXG4gKi9cbmV4cG9ydCBjbGFzcyBPYmplY3RBY2N1bXVsYXRvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl9fc2l6ZVwiLCB7XG4gICAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqIEBkZXNjcmlwdGlvbiBFeHBhbmRzIHRoZSBhY2N1bXVsYXRvciB3aXRoIHByb3BlcnRpZXMgZnJvbSBhIG5ldyBvYmplY3RcbiAgICAgKiBAc3VtbWFyeSBBZGRzIG5ldyBwcm9wZXJ0aWVzIHRvIHRoZSBhY2N1bXVsYXRvclxuICAgICAqIEB0ZW1wbGF0ZSBWIC0gVGhlIHR5cGUgb2YgdGhlIG9iamVjdCBiZWluZyBleHBhbmRlZFxuICAgICAqIEBwYXJhbSB7Vn0gdmFsdWUgLSBUaGUgb2JqZWN0IHRvIGV4cGFuZCB3aXRoXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgZXhwYW5kKHZhbHVlKSB7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHZhbHVlKS5mb3JFYWNoKChbaywgdl0pID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB2LFxuICAgICAgICAgICAgICAgIHNldDogKHZhbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2ID0gdmFsO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBY2N1bXVsYXRlcyBhIG5ldyBvYmplY3QgaW50byB0aGUgYWNjdW11bGF0b3JcbiAgICAgKiBAc3VtbWFyeSBBZGRzIHByb3BlcnRpZXMgZnJvbSBhIG5ldyBvYmplY3QgdG8gdGhlIGFjY3VtdWxhdG9yLCBtYWludGFpbmluZyB0eXBlIGluZm9ybWF0aW9uXG4gICAgICogQHRlbXBsYXRlIFYgLSBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0IGJlaW5nIGFjY3VtdWxhdGVkXG4gICAgICogQHBhcmFtIHtWfSB2YWx1ZSAtIFRoZSBvYmplY3QgdG8gYWNjdW11bGF0ZVxuICAgICAqIEByZXR1cm5zIEEgbmV3IE9iamVjdEFjY3VtdWxhdG9yIGluc3RhbmNlIHdpdGggdXBkYXRlZCB0eXBlIGluZm9ybWF0aW9uXG4gICAgICogQG1lcm1haWRcbiAgICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICAgKiAgIHBhcnRpY2lwYW50IEEgYXMgQWNjdW11bGF0b3JcbiAgICAgKiAgIHBhcnRpY2lwYW50IE8gYXMgT2JqZWN0XG4gICAgICogICBBLT4+TzogR2V0IGVudHJpZXNcbiAgICAgKiAgIGxvb3AgRm9yIGVhY2ggZW50cnlcbiAgICAgKiAgICAgQS0+PkE6IERlZmluZSBwcm9wZXJ0eVxuICAgICAqICAgZW5kXG4gICAgICogICBBLT4+QTogVXBkYXRlIHNpemVcbiAgICAgKiAgIEEtPj5BOiBSZXR1cm4gdXBkYXRlZCBhY2N1bXVsYXRvclxuICAgICAqL1xuICAgIGFjY3VtdWxhdGUodmFsdWUpIHtcbiAgICAgICAgdGhpcy5leHBhbmQodmFsdWUpO1xuICAgICAgICB0aGlzLl9fc2l6ZSA9IHRoaXMuX19zaXplICsgT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYSB2YWx1ZSBmcm9tIHRoZSBhY2N1bXVsYXRvciBieSBpdHMga2V5XG4gICAgICogQHN1bW1hcnkgR2V0cyBhIHZhbHVlIGZyb20gdGhlIGFjY3VtdWxhdGVkIG9iamVjdCB1c2luZyBhIHR5cGUtc2FmZSBrZXlcbiAgICAgKiBAdGVtcGxhdGUgVCAtIHZhbHVlIHR5cGVcbiAgICAgKiBAdGVtcGxhdGUgSyAtIFRoZSBrZXkgdHlwZSwgbXVzdCBiZSBhIGtleSBvZiB0aGlzXG4gICAgICogQHBhcmFtIHtLfSBrZXkgLSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZXRyaWV2ZVxuICAgICAqIEByZXR1cm5zIFRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGtleVxuICAgICAqL1xuICAgIGdldChrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIHRoaXMpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBLZXkgJHtrZXl9IGRvZXMgbm90IGV4aXN0IGluIGFjY3VtdWxhdG9yLiBBdmFpbGFibGUga2V5czogJHt0aGlzLmtleXMoKS5qb2luKFwiLCBcIil9YCk7XG4gICAgICAgIHJldHVybiB0aGlzW2tleV07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYSB2YWx1ZSBmcm9tIHRoZSBhY2N1bXVsYXRvciBieSBpdHMga2V5XG4gICAgICogQHN1bW1hcnkgR2V0cyBhIHZhbHVlIGZyb20gdGhlIGFjY3VtdWxhdGVkIG9iamVjdCB1c2luZyBhIHR5cGUtc2FmZSBrZXlcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmV0cmlldmVcbiAgICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZXRyaWV2ZVxuICAgICAqL1xuICAgIHB1dChrZXksIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjY3VtdWxhdGUoeyBba2V5XTogdmFsdWUgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgYSBrZXkgZXhpc3RzIGluIHRoZSBhY2N1bXVsYXRvclxuICAgICAqIEBzdW1tYXJ5IERldGVybWluZXMgd2hldGhlciB0aGUgYWNjdW11bGF0b3IgY29udGFpbnMgYSBzcGVjaWZpYyBrZXlcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSB0byBjaGVjayBmb3IgZXhpc3RlbmNlXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGtleSBleGlzdHMsIGZhbHNlIG90aGVyd2lzZVxuICAgICAqL1xuICAgIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpc1trZXldO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmVtb3ZlcyBhIGtleS12YWx1ZSBwYWlyIGZyb20gdGhlIGFjY3VtdWxhdG9yXG4gICAgICogQHN1bW1hcnkgRGVsZXRlcyBhIHByb3BlcnR5IGZyb20gdGhlIGFjY3VtdWxhdGVkIG9iamVjdFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byByZW1vdmVcbiAgICAgKiBAcmV0dXJucyB7fSBUaGUgYWNjdW11bGF0b3IgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IHJlbW92ZWRcbiAgICAgKi9cbiAgICByZW1vdmUoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbiB0aGlzKSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICBkZWxldGUgdGhpc1trZXldO1xuICAgICAgICB0aGlzLl9fc2l6ZS0tO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhbGwga2V5cyBmcm9tIHRoZSBhY2N1bXVsYXRvclxuICAgICAqIEBzdW1tYXJ5IEdldHMgYW4gYXJyYXkgb2YgYWxsIGFjY3VtdWxhdGVkIHByb3BlcnR5IGtleXNcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nW119IEFuIGFycmF5IG9mIGtleXMgYXMgc3RyaW5nc1xuICAgICAqL1xuICAgIGtleXMoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhbGwgdmFsdWVzIGZyb20gdGhlIGFjY3VtdWxhdG9yXG4gICAgICogQHN1bW1hcnkgR2V0cyBhbiBhcnJheSBvZiBhbGwgYWNjdW11bGF0ZWQgcHJvcGVydHkgdmFsdWVzXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgdmFsdWVzXG4gICAgICovXG4gICAgdmFsdWVzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIG51bWJlciBvZiBrZXktdmFsdWUgcGFpcnMgaW4gdGhlIGFjY3VtdWxhdG9yXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyB0aGUgY291bnQgb2YgYWNjdW11bGF0ZWQgcHJvcGVydGllc1xuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBudW1iZXIgb2Yga2V5LXZhbHVlIHBhaXJzXG4gICAgICovXG4gICAgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19zaXplO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2xlYXJzIGFsbCBhY2N1bXVsYXRlZCBrZXktdmFsdWUgcGFpcnNcbiAgICAgKiBAc3VtbWFyeSBSZW1vdmVzIGFsbCBwcm9wZXJ0aWVzIGZyb20gdGhlIGFjY3VtdWxhdG9yIGFuZCByZXR1cm5zIGEgbmV3IGVtcHR5IGluc3RhbmNlXG4gICAgICogQHJldHVybnMge09iamVjdEFjY3VtdWxhdG9yPG5ldmVyPn0gQSBuZXcgZW1wdHkgT2JqZWN0QWNjdW11bGF0b3IgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBjbGVhcigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYmplY3RBY2N1bXVsYXRvcigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgYSBjYWxsYmFjayBmb3IgZWFjaCBrZXktdmFsdWUgcGFpciBpbiB0aGUgYWNjdW11bGF0b3JcbiAgICAgKiBAc3VtbWFyeSBJdGVyYXRlcyBvdmVyIGFsbCBhY2N1bXVsYXRlZCBwcm9wZXJ0aWVzLCBjYWxsaW5nIGEgZnVuY3Rpb24gZm9yIGVhY2hcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGFueSwgc3RyaW5nLCBudW1iZXIpOiB2b2lkfSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0byBleGVjdXRlIGZvciBlYWNoIGVudHJ5XG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgICAgICBPYmplY3QuZW50cmllcyh0aGlzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0sIGkpID0+IGNhbGxiYWNrKHZhbHVlLCBrZXksIGkpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgYXJyYXkgd2l0aCB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nIGEgcHJvdmlkZWQgZnVuY3Rpb24gb24gZXZlcnkgZWxlbWVudCBpbiB0aGUgYWNjdW11bGF0b3JcbiAgICAgKiBAc3VtbWFyeSBNYXBzIGVhY2ggYWNjdW11bGF0ZWQgcHJvcGVydHkgdG8gYSBuZXcgdmFsdWUgdXNpbmcgYSBjYWxsYmFjayBmdW5jdGlvblxuICAgICAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHR5cGUgb2YgdGhlIG1hcHBlZCB2YWx1ZXNcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGFueSwgc3RyaW5nLG51bWJlcik6IFJ9IGNhbGxiYWNrIC0gRnVuY3Rpb24gdGhhdCBwcm9kdWNlcyBhbiBlbGVtZW50IG9mIHRoZSBuZXcgYXJyYXlcbiAgICAgKiBAcmV0dXJucyB7UltdfSBBIG5ldyBhcnJheSB3aXRoIGVhY2ggZWxlbWVudCBiZWluZyB0aGUgcmVzdWx0IG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvblxuICAgICAqL1xuICAgIG1hcChjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcykubWFwKChba2V5LCB2YWx1ZV0sIGkpID0+IGNhbGxiYWNrKHZhbHVlLCBrZXksIGkpKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lZV05qZFcxMWJHRjBiM0l1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZZV05qZFcxMWJHRjBiM0l1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRTdPenM3T3pzN1IwRlBSenRCUVVOSUxFMUJRVTBzVDBGQlR5eHBRa0ZCYVVJN1NVRlJOVUk3VVVGRFJTeE5RVUZOTEVOQlFVTXNZMEZCWXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hSUVVGUkxFVkJRVVU3V1VGRGNFTXNTMEZCU3l4RlFVRkZMRU5CUVVNN1dVRkRVaXhSUVVGUkxFVkJRVVVzU1VGQlNUdFpRVU5rTEZsQlFWa3NSVUZCUlN4TFFVRkxPMWxCUTI1Q0xGVkJRVlVzUlVGQlJTeExRVUZMTzFOQlEyeENMRU5CUVVNc1EwRkJRenRKUVVOTUxFTkJRVU03U1VGRlJEczdPenM3T3p0UFFVOUhPMGxCUTA4c1RVRkJUU3hEUVVGdFFpeExRVUZSTzFGQlEzcERMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlR0WlFVTjJReXhOUVVGTkxFTkJRVU1zWTBGQll5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRMRVZCUVVVN1owSkJRemRDTEVkQlFVY3NSVUZCUlN4SFFVRkhMRVZCUVVVc1EwRkJReXhEUVVGRE8yZENRVU5hTEVkQlFVY3NSVUZCUlN4RFFVRkRMRWRCUVdVc1JVRkJSU3hGUVVGRk8yOUNRVU4yUWl4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRE8yZENRVU5XTEVOQlFVTTdaMEpCUTBRc1dVRkJXU3hGUVVGRkxFbEJRVWs3WjBKQlEyeENMRlZCUVZVc1JVRkJSU3hKUVVGSk8yRkJRMnBDTEVOQlFVTXNRMEZCUXp0UlFVTk1MRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRMHdzUTBGQlF6dEpRVVZFT3pzN096czdPenM3T3pzN096czdPMDlCWjBKSE8wbEJRMGdzVlVGQlZTeERRVUZ0UWl4TFFVRlJPMUZCUTI1RExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1VVRkRia0lzU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRE8xRkJRM1JFTEU5QlFVOHNTVUZCYlVRc1EwRkJRenRKUVVNM1JDeERRVUZETzBsQlJVUTdPenM3T3pzN1QwRlBSenRKUVVOSUxFZEJRVWNzUTBGQmIwSXNSMEZCVFR0UlFVTXpRaXhKUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NTVUZCU1N4RFFVRkRPMWxCUTJoQ0xFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlEySXNUMEZCVHl4SFFVRmhMRzFFUVVGdFJDeEpRVUZKTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVOeVJpeEpRVUZKTEVOQlEwd3NSVUZCUlN4RFFVTktMRU5CUVVNN1VVRkRTaXhQUVVGUkxFbEJRVmtzUTBGQlF5eEhRVUZSTEVOQlFWTXNRMEZCUXp0SlFVTjZReXhEUVVGRE8wbEJSVVE3T3pzN08wOUJTMGM3U1VGRFNDeEhRVUZITEVOQlFVTXNSMEZCVnl4RlFVRkZMRXRCUVZVN1VVRkRla0lzVDBGQlR5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeExRVUZMTEVWQlFVVXNRMEZCUXl4RFFVRkRPMGxCUXpORExFTkJRVU03U1VGRlJEczdPenM3VDBGTFJ6dEpRVU5JTEVkQlFVY3NRMEZCUXl4SFFVRlhPMUZCUTJJc1QwRkJUeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFXbENMRU5CUVVNc1EwRkJRenRKUVVOdVF5eERRVUZETzBsQlJVUTdPenM3TzA5QlMwYzdTVUZEU0N4TlFVRk5MRU5CUTBvc1IwRkJkMEk3VVVGSmVFSXNTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFbEJRVWtzUTBGQlF6dFpRVUZGTEU5QlFVOHNTVUZCU1N4RFFVRkRPMUZCUldoRExFOUJRVThzU1VGQlNTeERRVUZETEVkQlFXbENMRU5CUVVNc1EwRkJRenRSUVVNdlFpeEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1VVRkRaQ3hQUVVGUExFbEJRMjlETEVOQlFVTTdTVUZET1VNc1EwRkJRenRKUVVWRU96czdPMDlCU1VjN1NVRkRTQ3hKUVVGSk8xRkJRMFlzVDBGQlR5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRek5DTEVOQlFVTTdTVUZGUkRzN096dFBRVWxITzBsQlEwZ3NUVUZCVFR0UlFVTktMRTlCUVU4c1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTTNRaXhEUVVGRE8wbEJSVVE3T3pzN1QwRkpSenRKUVVOSUxFbEJRVWs3VVVGRFJpeFBRVUZQTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNN1NVRkRja0lzUTBGQlF6dEpRVVZFT3pzN08wOUJTVWM3U1VGRFNDeExRVUZMTzFGQlEwZ3NUMEZCVHl4SlFVRkpMR2xDUVVGcFFpeEZRVUZGTEVOQlFVTTdTVUZEYWtNc1EwRkJRenRKUVVWRU96czdPenRQUVV0SE8wbEJRMGdzVDBGQlR5eERRVU5NTEZGQlFYVkZPMUZCUlhaRkxFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNTMEZCU3l4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGREwwTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1JVRkJSU3hIUVVGcFFpeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVTjBReXhEUVVGRE8wbEJRMG9zUTBGQlF6dEpRVVZFT3pzN096czdUMEZOUnp0SlFVTklMRWRCUVVjc1EwRkRSQ3hSUVVGdlJUdFJRVVZ3UlN4UFFVRlBMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUzBGQlN5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkRiRVFzVVVGQlVTeERRVUZETEV0QlFVc3NSVUZCUlN4SFFVRnBRaXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVU4wUXl4RFFVRkRPMGxCUTBvc1EwRkJRenREUVVOR0lpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkFZMnhoYzNNZ1QySnFaV04wUVdOamRXMTFiR0YwYjNKY2JpQXFJRUIwWlcxd2JHRjBaU0JVSUMwZ1ZHaGxJSFI1Y0dVZ2IyWWdkR2hsSUdGalkzVnRkV3hoZEdWa0lHOWlhbVZqZEN3Z1pYaDBaVzVrY3lCdlltcGxZM1JjYmlBcUlFQmtaWE5qY21sd2RHbHZiaUJCSUdOc1lYTnpJSFJvWVhRZ1lXTmpkVzExYkdGMFpYTWdiMkpxWldOMGN5QmhibVFnY0hKdmRtbGtaWE1nZEhsd1pTMXpZV1psSUdGalkyVnpjeUIwYnlCMGFHVnBjaUJ3Y205d1pYSjBhV1Z6TGx4dUlDb2dTWFFnWVd4c2IzZHpJR1p2Y2lCa2VXNWhiV2xqSUdGa1pHbDBhVzl1SUc5bUlIQnliM0JsY25ScFpYTWdkMmhwYkdVZ2JXRnBiblJoYVc1cGJtY2dkSGx3WlNCcGJtWnZjbTFoZEdsdmJpNWNiaUFxSUVCemRXMXRZWEo1SUVGalkzVnRkV3hoZEdWeklHOWlhbVZqZEhNZ1lXNWtJRzFoYVc1MFlXbHVjeUIwZVhCbElHbHVabTl5YldGMGFXOXVJR1p2Y2lCaFkyTjFiWFZzWVhSbFpDQndjbTl3WlhKMGFXVnpYRzRnS2lCQWJXVnRZbVZ5VDJZZ2RYUnBiSE5jYmlBcUwxeHVaWGh3YjNKMElHTnNZWE56SUU5aWFtVmpkRUZqWTNWdGRXeGhkRzl5UEZRZ1pYaDBaVzVrY3lCdlltcGxZM1ErSUh0Y2JpQWdMeW9xWEc0Z0lDQXFJRUJ3Y21sMllYUmxYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJVYUdVZ2MybDZaU0J2WmlCMGFHVWdZV05qZFcxMWJHRjBaV1FnYjJKcVpXTjBYRzRnSUNBcUlFQjBlWEJsSUh0dWRXMWlaWEo5WEc0Z0lDQXFMMXh1SUNCd2NtbDJZWFJsSUY5ZmMybDZaU0U2SUc1MWJXSmxjanRjYmx4dUlDQmpiMjV6ZEhKMVkzUnZjaWdwSUh0Y2JpQWdJQ0JQWW1wbFkzUXVaR1ZtYVc1bFVISnZjR1Z5ZEhrb2RHaHBjeXdnWENKZlgzTnBlbVZjSWl3Z2UxeHVJQ0FnSUNBZ2RtRnNkV1U2SURBc1hHNGdJQ0FnSUNCM2NtbDBZV0pzWlRvZ2RISjFaU3hjYmlBZ0lDQWdJR052Ym1acFozVnlZV0pzWlRvZ1ptRnNjMlVzWEc0Z0lDQWdJQ0JsYm5WdFpYSmhZbXhsT2lCbVlXeHpaU3hjYmlBZ0lDQjlLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCQWNISnZkR1ZqZEdWa1hHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQkZlSEJoYm1SeklIUm9aU0JoWTJOMWJYVnNZWFJ2Y2lCM2FYUm9JSEJ5YjNCbGNuUnBaWE1nWm5KdmJTQmhJRzVsZHlCdlltcGxZM1JjYmlBZ0lDb2dRSE4xYlcxaGNua2dRV1JrY3lCdVpYY2djSEp2Y0dWeWRHbGxjeUIwYnlCMGFHVWdZV05qZFcxMWJHRjBiM0pjYmlBZ0lDb2dRSFJsYlhCc1lYUmxJRllnTFNCVWFHVWdkSGx3WlNCdlppQjBhR1VnYjJKcVpXTjBJR0psYVc1bklHVjRjR0Z1WkdWa1hHNGdJQ0FxSUVCd1lYSmhiU0I3Vm4wZ2RtRnNkV1VnTFNCVWFHVWdiMkpxWldOMElIUnZJR1Y0Y0dGdVpDQjNhWFJvWEc0Z0lDQXFJRUJ5WlhSMWNtNXpJSHQyYjJsa2ZWeHVJQ0FnS2k5Y2JpQWdjSEp2ZEdWamRHVmtJR1Y0Y0dGdVpEeFdJR1Y0ZEdWdVpITWdiMkpxWldOMFBpaDJZV3gxWlRvZ1ZpazZJSFp2YVdRZ2UxeHVJQ0FnSUU5aWFtVmpkQzVsYm5SeWFXVnpLSFpoYkhWbEtTNW1iM0pGWVdOb0tDaGJheXdnZGwwcElEMCtJSHRjYmlBZ0lDQWdJRTlpYW1WamRDNWtaV1pwYm1WUWNtOXdaWEowZVNoMGFHbHpMQ0JyTENCN1hHNGdJQ0FnSUNBZ0lHZGxkRG9nS0NrZ1BUNGdkaXhjYmlBZ0lDQWdJQ0FnYzJWME9pQW9kbUZzT2lCV1cydGxlVzltSUZaZEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ2RpQTlJSFpoYkR0Y2JpQWdJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lDQWdZMjl1Wm1sbmRYSmhZbXhsT2lCMGNuVmxMRnh1SUNBZ0lDQWdJQ0JsYm5WdFpYSmhZbXhsT2lCMGNuVmxMRnh1SUNBZ0lDQWdmU2s3WEc0Z0lDQWdmU2s3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1FHUmxjMk55YVhCMGFXOXVJRUZqWTNWdGRXeGhkR1Z6SUdFZ2JtVjNJRzlpYW1WamRDQnBiblJ2SUhSb1pTQmhZMk4xYlhWc1lYUnZjbHh1SUNBZ0tpQkFjM1Z0YldGeWVTQkJaR1J6SUhCeWIzQmxjblJwWlhNZ1puSnZiU0JoSUc1bGR5QnZZbXBsWTNRZ2RHOGdkR2hsSUdGalkzVnRkV3hoZEc5eUxDQnRZV2x1ZEdGcGJtbHVaeUIwZVhCbElHbHVabTl5YldGMGFXOXVYRzRnSUNBcUlFQjBaVzF3YkdGMFpTQldJQzBnVkdobElIUjVjR1VnYjJZZ2RHaGxJRzlpYW1WamRDQmlaV2x1WnlCaFkyTjFiWFZzWVhSbFpGeHVJQ0FnS2lCQWNHRnlZVzBnZTFaOUlIWmhiSFZsSUMwZ1ZHaGxJRzlpYW1WamRDQjBieUJoWTJOMWJYVnNZWFJsWEc0Z0lDQXFJRUJ5WlhSMWNtNXpJRUVnYm1WM0lFOWlhbVZqZEVGalkzVnRkV3hoZEc5eUlHbHVjM1JoYm1ObElIZHBkR2dnZFhCa1lYUmxaQ0IwZVhCbElHbHVabTl5YldGMGFXOXVYRzRnSUNBcUlFQnRaWEp0WVdsa1hHNGdJQ0FxSUhObGNYVmxibU5sUkdsaFozSmhiVnh1SUNBZ0tpQWdJSEJoY25ScFkybHdZVzUwSUVFZ1lYTWdRV05qZFcxMWJHRjBiM0pjYmlBZ0lDb2dJQ0J3WVhKMGFXTnBjR0Z1ZENCUElHRnpJRTlpYW1WamRGeHVJQ0FnS2lBZ0lFRXRQajVQT2lCSFpYUWdaVzUwY21sbGMxeHVJQ0FnS2lBZ0lHeHZiM0FnUm05eUlHVmhZMmdnWlc1MGNubGNiaUFnSUNvZ0lDQWdJRUV0UGo1Qk9pQkVaV1pwYm1VZ2NISnZjR1Z5ZEhsY2JpQWdJQ29nSUNCbGJtUmNiaUFnSUNvZ0lDQkJMVDQrUVRvZ1ZYQmtZWFJsSUhOcGVtVmNiaUFnSUNvZ0lDQkJMVDQrUVRvZ1VtVjBkWEp1SUhWd1pHRjBaV1FnWVdOamRXMTFiR0YwYjNKY2JpQWdJQ292WEc0Z0lHRmpZM1Z0ZFd4aGRHVThWaUJsZUhSbGJtUnpJRzlpYW1WamRENG9kbUZzZFdVNklGWXBPaUJVSUNZZ1ZpQW1JRTlpYW1WamRFRmpZM1Z0ZFd4aGRHOXlQRlFnSmlCV1BpQjdYRzRnSUNBZ2RHaHBjeTVsZUhCaGJtUW9kbUZzZFdVcE8xeHVJQ0FnSUhSb2FYTXVYMTl6YVhwbElEMGdkR2hwY3k1ZlgzTnBlbVVnS3lCUFltcGxZM1F1YTJWNWN5aDJZV3gxWlNrdWJHVnVaM1JvTzF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6SUdGeklIVnVhMjV2ZDI0Z1lYTWdWQ0FtSUZZZ0ppQlBZbXBsWTNSQlkyTjFiWFZzWVhSdmNqeFVJQ1lnVmo0N1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUZKbGRISnBaWFpsY3lCaElIWmhiSFZsSUdaeWIyMGdkR2hsSUdGalkzVnRkV3hoZEc5eUlHSjVJR2wwY3lCclpYbGNiaUFnSUNvZ1FITjFiVzFoY25rZ1IyVjBjeUJoSUhaaGJIVmxJR1p5YjIwZ2RHaGxJR0ZqWTNWdGRXeGhkR1ZrSUc5aWFtVmpkQ0IxYzJsdVp5QmhJSFI1Y0dVdGMyRm1aU0JyWlhsY2JpQWdJQ29nUUhSbGJYQnNZWFJsSUZRZ0xTQjJZV3gxWlNCMGVYQmxYRzRnSUNBcUlFQjBaVzF3YkdGMFpTQkxJQzBnVkdobElHdGxlU0IwZVhCbExDQnRkWE4wSUdKbElHRWdhMlY1SUc5bUlIUm9hWE5jYmlBZ0lDb2dRSEJoY21GdElIdExmU0JyWlhrZ0xTQlVhR1VnYTJWNUlHOW1JSFJvWlNCMllXeDFaU0IwYnlCeVpYUnlhV1YyWlZ4dUlDQWdLaUJBY21WMGRYSnVjeUJVYUdVZ2RtRnNkV1VnWVhOemIyTnBZWFJsWkNCM2FYUm9JSFJvWlNCclpYbGNiaUFnSUNvdlhHNGdJR2RsZER4TElHVjRkR1Z1WkhNZ2EyVjViMllnVkQ0b2EyVjVPaUJMS1RvZ1ZGdExYU0I3WEc0Z0lDQWdhV1lnS0NFb2EyVjVJR2x1SUhSb2FYTXBLVnh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtGeHVJQ0FnSUNBZ0lDQmdTMlY1SUNSN2EyVjVJR0Z6SUhOMGNtbHVaMzBnWkc5bGN5QnViM1FnWlhocGMzUWdhVzRnWVdOamRXMTFiR0YwYjNJdUlFRjJZV2xzWVdKc1pTQnJaWGx6T2lBa2UzUm9hWE11YTJWNWN5Z3BMbXB2YVc0b1hHNGdJQ0FnSUNBZ0lDQWdYQ0lzSUZ3aVhHNGdJQ0FnSUNBZ0lDbDlZRnh1SUNBZ0lDQWdLVHRjYmlBZ0lDQnlaWFIxY200Z0tIUm9hWE1nWVhNZ1lXNTVLVnRyWlhrZ1lYTWdTMTBnWVhNZ1ZGdExYVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdVbVYwY21sbGRtVnpJR0VnZG1Gc2RXVWdabkp2YlNCMGFHVWdZV05qZFcxMWJHRjBiM0lnWW5rZ2FYUnpJR3RsZVZ4dUlDQWdLaUJBYzNWdGJXRnllU0JIWlhSeklHRWdkbUZzZFdVZ1puSnZiU0IwYUdVZ1lXTmpkVzExYkdGMFpXUWdiMkpxWldOMElIVnphVzVuSUdFZ2RIbHdaUzF6WVdabElHdGxlVnh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2EyVjVJQzBnVkdobElHdGxlU0J2WmlCMGFHVWdkbUZzZFdVZ2RHOGdjbVYwY21sbGRtVmNiaUFnSUNvZ1FIQmhjbUZ0SUh0aGJubDlJSFpoYkhWbElDMGdWR2hsSUd0bGVTQnZaaUIwYUdVZ2RtRnNkV1VnZEc4Z2NtVjBjbWxsZG1WY2JpQWdJQ292WEc0Z0lIQjFkQ2hyWlhrNklITjBjbWx1Wnl3Z2RtRnNkV1U2SUdGdWVTa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbUZqWTNWdGRXeGhkR1VvZXlCYmEyVjVYVG9nZG1Gc2RXVWdmU2s3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1FHUmxjMk55YVhCMGFXOXVJRU5vWldOcmN5QnBaaUJoSUd0bGVTQmxlR2x6ZEhNZ2FXNGdkR2hsSUdGalkzVnRkV3hoZEc5eVhHNGdJQ0FxSUVCemRXMXRZWEo1SUVSbGRHVnliV2x1WlhNZ2QyaGxkR2hsY2lCMGFHVWdZV05qZFcxMWJHRjBiM0lnWTI5dWRHRnBibk1nWVNCemNHVmphV1pwWXlCclpYbGNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUd0bGVTQXRJRlJvWlNCclpYa2dkRzhnWTJobFkyc2dabTl5SUdWNGFYTjBaVzVqWlZ4dUlDQWdLaUJBY21WMGRYSnVjeUI3WW05dmJHVmhibjBnVkhKMVpTQnBaaUIwYUdVZ2EyVjVJR1Y0YVhOMGN5d2dabUZzYzJVZ2IzUm9aWEozYVhObFhHNGdJQ0FxTDF4dUlDQm9ZWE1vYTJWNU9pQnpkSEpwYm1jcE9pQmliMjlzWldGdUlIdGNiaUFnSUNCeVpYUjFjbTRnSVNGMGFHbHpXMnRsZVNCaGN5QnJaWGx2WmlCMGFHbHpYVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdVbVZ0YjNabGN5QmhJR3RsZVMxMllXeDFaU0J3WVdseUlHWnliMjBnZEdobElHRmpZM1Z0ZFd4aGRHOXlYRzRnSUNBcUlFQnpkVzF0WVhKNUlFUmxiR1YwWlhNZ1lTQndjbTl3WlhKMGVTQm1jbTl0SUhSb1pTQmhZMk4xYlhWc1lYUmxaQ0J2WW1wbFkzUmNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUd0bGVTQXRJRlJvWlNCclpYa2diMllnZEdobElIQnliM0JsY25SNUlIUnZJSEpsYlc5MlpWeHVJQ0FnS2lCQWNtVjBkWEp1Y3lCN2ZTQlVhR1VnWVdOamRXMTFiR0YwYjNJZ2FXNXpkR0Z1WTJVZ2QybDBhQ0IwYUdVZ2MzQmxZMmxtYVdWa0lIQnliM0JsY25SNUlISmxiVzkyWldSY2JpQWdJQ292WEc0Z0lISmxiVzkyWlNoY2JpQWdJQ0JyWlhrNklHdGxlVzltSUhSb2FYTWdmQ0J6ZEhKcGJtZGNiaUFnS1RwY2JpQWdJQ0I4SUNoUGJXbDBQSFJvYVhNc0lIUjVjR1Z2WmlCclpYaytJQ1lnVDJKcVpXTjBRV05qZFcxMWJHRjBiM0k4VDIxcGREeDBhR2x6TENCMGVYQmxiMllnYTJWNVBqNHBYRzRnSUNBZ2ZDQjBhR2x6SUh0Y2JpQWdJQ0JwWmlBb0lTaHJaWGtnYVc0Z2RHaHBjeWtwSUhKbGRIVnliaUIwYUdsek8xeHVYRzRnSUNBZ1pHVnNaWFJsSUhSb2FYTmJhMlY1SUdGeklHdGxlVzltSUhSb2FYTmRPMXh1SUNBZ0lIUm9hWE11WDE5emFYcGxMUzA3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE1nWVhNZ2RXNXJibTkzYmlCaGN5QlBiV2wwUEhSb2FYTXNJSFI1Y0dWdlppQnJaWGsrSUNaY2JpQWdJQ0FnSUU5aWFtVmpkRUZqWTNWdGRXeGhkRzl5UEU5dGFYUThkR2hwY3l3Z2RIbHdaVzltSUd0bGVUNCtPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQlNaWFJ5YVdWMlpYTWdZV3hzSUd0bGVYTWdabkp2YlNCMGFHVWdZV05qZFcxMWJHRjBiM0pjYmlBZ0lDb2dRSE4xYlcxaGNua2dSMlYwY3lCaGJpQmhjbkpoZVNCdlppQmhiR3dnWVdOamRXMTFiR0YwWldRZ2NISnZjR1Z5ZEhrZ2EyVjVjMXh1SUNBZ0tpQkFjbVYwZFhKdWN5QjdjM1J5YVc1blcxMTlJRUZ1SUdGeWNtRjVJRzltSUd0bGVYTWdZWE1nYzNSeWFXNW5jMXh1SUNBZ0tpOWNiaUFnYTJWNWN5Z3BPaUJ6ZEhKcGJtZGJYU0I3WEc0Z0lDQWdjbVYwZFhKdUlFOWlhbVZqZEM1clpYbHpLSFJvYVhNcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCU1pYUnlhV1YyWlhNZ1lXeHNJSFpoYkhWbGN5Qm1jbTl0SUhSb1pTQmhZMk4xYlhWc1lYUnZjbHh1SUNBZ0tpQkFjM1Z0YldGeWVTQkhaWFJ6SUdGdUlHRnljbUY1SUc5bUlHRnNiQ0JoWTJOMWJYVnNZWFJsWkNCd2NtOXdaWEowZVNCMllXeDFaWE5jYmlBZ0lDb2dRSEpsZEhWeWJuTWdRVzRnWVhKeVlYa2diMllnZG1Gc2RXVnpYRzRnSUNBcUwxeHVJQ0IyWVd4MVpYTW9LVG9nVkZ0clpYbHZaaUJVWFZ0ZElIdGNiaUFnSUNCeVpYUjFjbTRnVDJKcVpXTjBMblpoYkhWbGN5aDBhR2x6S1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnUjJWMGN5QjBhR1VnYm5WdFltVnlJRzltSUd0bGVTMTJZV3gxWlNCd1lXbHljeUJwYmlCMGFHVWdZV05qZFcxMWJHRjBiM0pjYmlBZ0lDb2dRSE4xYlcxaGNua2dVbVYwZFhKdWN5QjBhR1VnWTI5MWJuUWdiMllnWVdOamRXMTFiR0YwWldRZ2NISnZjR1Z5ZEdsbGMxeHVJQ0FnS2lCQWNtVjBkWEp1Y3lCN2JuVnRZbVZ5ZlNCVWFHVWdiblZ0WW1WeUlHOW1JR3RsZVMxMllXeDFaU0J3WVdseWMxeHVJQ0FnS2k5Y2JpQWdjMmw2WlNncE9pQnVkVzFpWlhJZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxsOWZjMmw2WlR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnUTJ4bFlYSnpJR0ZzYkNCaFkyTjFiWFZzWVhSbFpDQnJaWGt0ZG1Gc2RXVWdjR0ZwY25OY2JpQWdJQ29nUUhOMWJXMWhjbmtnVW1WdGIzWmxjeUJoYkd3Z2NISnZjR1Z5ZEdsbGN5Qm1jbTl0SUhSb1pTQmhZMk4xYlhWc1lYUnZjaUJoYm1RZ2NtVjBkWEp1Y3lCaElHNWxkeUJsYlhCMGVTQnBibk4wWVc1alpWeHVJQ0FnS2lCQWNtVjBkWEp1Y3lCN1QySnFaV04wUVdOamRXMTFiR0YwYjNJOGJtVjJaWEkrZlNCQklHNWxkeUJsYlhCMGVTQlBZbXBsWTNSQlkyTjFiWFZzWVhSdmNpQnBibk4wWVc1alpWeHVJQ0FnS2k5Y2JpQWdZMnhsWVhJb0tUb2dUMkpxWldOMFFXTmpkVzExYkdGMGIzSThibVYyWlhJK0lIdGNiaUFnSUNCeVpYUjFjbTRnYm1WM0lFOWlhbVZqZEVGalkzVnRkV3hoZEc5eUtDazdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlFVjRaV04xZEdWeklHRWdZMkZzYkdKaFkyc2dabTl5SUdWaFkyZ2dhMlY1TFhaaGJIVmxJSEJoYVhJZ2FXNGdkR2hsSUdGalkzVnRkV3hoZEc5eVhHNGdJQ0FxSUVCemRXMXRZWEo1SUVsMFpYSmhkR1Z6SUc5MlpYSWdZV3hzSUdGalkzVnRkV3hoZEdWa0lIQnliM0JsY25ScFpYTXNJR05oYkd4cGJtY2dZU0JtZFc1amRHbHZiaUJtYjNJZ1pXRmphRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UyWjFibU4wYVc5dUtHRnVlU3dnYzNSeWFXNW5MQ0J1ZFcxaVpYSXBPaUIyYjJsa2ZTQmpZV3hzWW1GamF5QXRJRlJvWlNCbWRXNWpkR2x2YmlCMGJ5QmxlR1ZqZFhSbElHWnZjaUJsWVdOb0lHVnVkSEo1WEc0Z0lDQXFJRUJ5WlhSMWNtNXpJSHQyYjJsa2ZWeHVJQ0FnS2k5Y2JpQWdabTl5UldGamFDaGNiaUFnSUNCallXeHNZbUZqYXpvZ0tIWmhiSFZsT2lCMGFHbHpXMnRsZVc5bUlIUm9hWE5kTENCclpYazZJR3RsZVc5bUlIUm9hWE1zSUdrNklHNTFiV0psY2lrZ1BUNGdkbTlwWkZ4dUlDQXBPaUIyYjJsa0lIdGNiaUFnSUNCUFltcGxZM1F1Wlc1MGNtbGxjeWgwYUdsektTNW1iM0pGWVdOb0tDaGJhMlY1TENCMllXeDFaVjBzSUdrcElEMCtYRzRnSUNBZ0lDQmpZV3hzWW1GamF5aDJZV3gxWlN3Z2EyVjVJR0Z6SUd0bGVXOW1JSFJvYVhNc0lHa3BYRzRnSUNBZ0tUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1EzSmxZWFJsY3lCaElHNWxkeUJoY25KaGVTQjNhWFJvSUhSb1pTQnlaWE4xYkhSeklHOW1JR05oYkd4cGJtY2dZU0J3Y205MmFXUmxaQ0JtZFc1amRHbHZiaUJ2YmlCbGRtVnllU0JsYkdWdFpXNTBJR2x1SUhSb1pTQmhZMk4xYlhWc1lYUnZjbHh1SUNBZ0tpQkFjM1Z0YldGeWVTQk5ZWEJ6SUdWaFkyZ2dZV05qZFcxMWJHRjBaV1FnY0hKdmNHVnlkSGtnZEc4Z1lTQnVaWGNnZG1Gc2RXVWdkWE5wYm1jZ1lTQmpZV3hzWW1GamF5Qm1kVzVqZEdsdmJseHVJQ0FnS2lCQWRHVnRjR3hoZEdVZ1VpQXRJRlJvWlNCMGVYQmxJRzltSUhSb1pTQnRZWEJ3WldRZ2RtRnNkV1Z6WEc0Z0lDQXFJRUJ3WVhKaGJTQjdablZ1WTNScGIyNG9ZVzU1TENCemRISnBibWNzYm5WdFltVnlLVG9nVW4wZ1kyRnNiR0poWTJzZ0xTQkdkVzVqZEdsdmJpQjBhR0YwSUhCeWIyUjFZMlZ6SUdGdUlHVnNaVzFsYm5RZ2IyWWdkR2hsSUc1bGR5QmhjbkpoZVZ4dUlDQWdLaUJBY21WMGRYSnVjeUI3VWx0ZGZTQkJJRzVsZHlCaGNuSmhlU0IzYVhSb0lHVmhZMmdnWld4bGJXVnVkQ0JpWldsdVp5QjBhR1VnY21WemRXeDBJRzltSUhSb1pTQmpZV3hzWW1GamF5Qm1kVzVqZEdsdmJseHVJQ0FnS2k5Y2JpQWdiV0Z3UEZJK0tGeHVJQ0FnSUdOaGJHeGlZV05yT2lBb2RtRnNkV1U2SUhSb2FYTmJhMlY1YjJZZ2RHaHBjMTBzSUd0bGVUb2dhMlY1YjJZZ2RHaHBjeXdnYVRvZ2JuVnRZbVZ5S1NBOVBpQlNYRzRnSUNrNklGSmJYU0I3WEc0Z0lDQWdjbVYwZFhKdUlFOWlhbVZqZEM1bGJuUnlhV1Z6S0hSb2FYTXBMbTFoY0Nnb1cydGxlU3dnZG1Gc2RXVmRMQ0JwS1NBOVBseHVJQ0FnSUNBZ1kyRnNiR0poWTJzb2RtRnNkV1VzSUd0bGVTQmhjeUJyWlhsdlppQjBhR2x6TENCcEtWeHVJQ0FnSUNrN1hHNGdJSDFjYm4xY2JpSmRmUT09IiwiaW1wb3J0IHsgdG9FTlZGb3JtYXQgfSBmcm9tIFwiLi90ZXh0XCI7XG5pbXBvcnQgeyBFbnZpcm9ubWVudEZhY3RvcnkgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgaXNCcm93c2VyIH0gZnJvbSBcIi4vd2ViXCI7XG5pbXBvcnQgeyBPYmplY3RBY2N1bXVsYXRvciB9IGZyb20gXCJ0eXBlZC1vYmplY3QtYWNjdW11bGF0b3JcIjtcblxuLyoqXG4gKiBAY2xhc3MgRW52aXJvbm1lbnRcbiAqIEBleHRlbmRzIHtPYmplY3RBY2N1bXVsYXRvcjxUPn1cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAZGVzY3JpcHRpb24gQSBjbGFzcyByZXByZXNlbnRpbmcgYW4gZW52aXJvbm1lbnQgd2l0aCBhY2N1bXVsYXRpb24gY2FwYWJpbGl0aWVzLlxuICogQHN1bW1hcnkgTWFuYWdlcyBlbnZpcm9ubWVudC1yZWxhdGVkIGRhdGEgYW5kIHByb3ZpZGVzIG1ldGhvZHMgZm9yIGFjY3VtdWxhdGlvbiBhbmQga2V5IHJldHJpZXZhbC5cbiAqIEBwYXJhbSB7VH0gW2luaXRpYWxEYXRhXSAtIFRoZSBpbml0aWFsIGRhdGEgdG8gcG9wdWxhdGUgdGhlIGVudmlyb25tZW50IHdpdGguXG4gKi9cbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudDxUIGV4dGVuZHMgb2JqZWN0PiBleHRlbmRzIE9iamVjdEFjY3VtdWxhdG9yPFQ+IHtcbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQHByb3RlY3RlZFxuICAgKiBAZGVzY3JpcHRpb24gQSBmYWN0b3J5IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBFbnZpcm9ubWVudCBpbnN0YW5jZXMuXG4gICAqIEBzdW1tYXJ5IERlZmluZXMgaG93IG5ldyBpbnN0YW5jZXMgb2YgdGhlIEVudmlyb25tZW50IGNsYXNzIHNob3VsZCBiZSBjcmVhdGVkLlxuICAgKiBAcmV0dXJuIHtFbnZpcm9ubWVudDxhbnk+fSBBIG5ldyBpbnN0YW5jZSBvZiB0aGUgRW52aXJvbm1lbnQgY2xhc3MuXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RhdGljIGZhY3Rvcnk6IEVudmlyb25tZW50RmFjdG9yeTxhbnksIGFueT4gPVxuICAgICgpOiBFbnZpcm9ubWVudDxhbnk+ID0+IG5ldyBFbnZpcm9ubWVudCgpO1xuXG4gIC8qKlxuICAgKiBAc3RhdGljXG4gICAqIEBwcml2YXRlXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFbnZpcm9ubWVudCBjbGFzcy5cbiAgICogQHR5cGUge0Vudmlyb25tZW50PGFueT59XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IEVudmlyb25tZW50PGFueT47XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhIHZhbHVlIGZyb20gdGhlIGVudmlyb25tZW50XG4gICAqIEBzdW1tYXJ5IEdldHMgYSB2YWx1ZSBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGhhbmRsaW5nIGJyb3dzZXIgYW5kIE5vZGUuanMgZW52aXJvbm1lbnRzIGRpZmZlcmVudGx5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrIC0gVGhlIGtleSB0byByZXRyaWV2ZSBmcm9tIHRoZSBlbnZpcm9ubWVudFxuICAgKiBAcmV0dXJuIHt1bmtub3dufSBUaGUgdmFsdWUgZnJvbSB0aGUgZW52aXJvbm1lbnQsIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICovXG4gIHByb3RlY3RlZCBmcm9tRW52KGs6IHN0cmluZykge1xuICAgIGxldCBlbnY6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmIChpc0Jyb3dzZXIoKSkge1xuICAgICAgZW52ID0gKGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiB7IEVOVjogUmVjb3JkPHN0cmluZywgYW55PiB9KVtcbiAgICAgICAgXCJFTlZcIlxuICAgICAgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW52ID0gZ2xvYmFsVGhpcy5wcm9jZXNzLmVudjtcbiAgICAgIGsgPSB0b0VOVkZvcm1hdChrKTtcbiAgICB9XG4gICAgcmV0dXJuIGVudltrXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXhwYW5kcyBhbiBvYmplY3QgaW50byB0aGUgZW52aXJvbm1lbnRcbiAgICogQHN1bW1hcnkgRGVmaW5lcyBwcm9wZXJ0aWVzIG9uIHRoZSBlbnZpcm9ubWVudCBvYmplY3QgdGhhdCBjYW4gYmUgYWNjZXNzZWQgYXMgZ2V0dGVycyBhbmQgc2V0dGVyc1xuICAgKiBAdGVtcGxhdGUgViAtIFR5cGUgb2YgdGhlIG9iamVjdCBiZWluZyBleHBhbmRlZFxuICAgKiBAcGFyYW0ge1Z9IHZhbHVlIC0gVGhlIG9iamVjdCB0byBleHBhbmQgaW50byB0aGUgZW52aXJvbm1lbnRcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBleHBhbmQ8ViBleHRlbmRzIG9iamVjdD4odmFsdWU6IFYpOiB2b2lkIHtcbiAgICBPYmplY3QuZW50cmllcyh2YWx1ZSkuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgaywge1xuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBmcm9tRW52ID0gdGhpcy5mcm9tRW52KGspO1xuICAgICAgICAgIHJldHVybiB0eXBlb2YgZnJvbUVudiA9PT0gXCJ1bmRlZmluZWRcIiA/IHYgOiBmcm9tRW52O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6ICh2YWw6IFZba2V5b2YgVl0pID0+IHtcbiAgICAgICAgICB2ID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBzdGF0aWNcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBvciBjcmVhdGVzIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVudmlyb25tZW50IGNsYXNzLlxuICAgKiBAc3VtbWFyeSBFbnN1cmVzIG9ubHkgb25lIGluc3RhbmNlIG9mIHRoZSBFbnZpcm9ubWVudCBjbGFzcyBleGlzdHMuXG4gICAqIEB0ZW1wbGF0ZSBFXG4gICAqIEBwYXJhbSB7Li4udW5rbm93bltdfSBhcmdzIC0gQXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGZhY3RvcnkgZnVuY3Rpb24gaWYgYSBuZXcgaW5zdGFuY2UgaXMgY3JlYXRlZC5cbiAgICogQHJldHVybiB7RX0gVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRW52aXJvbm1lbnQgY2xhc3MuXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RhdGljIGluc3RhbmNlPEUgZXh0ZW5kcyBFbnZpcm9ubWVudDxhbnk+PiguLi5hcmdzOiB1bmtub3duW10pOiBFIHtcbiAgICBFbnZpcm9ubWVudC5faW5zdGFuY2UgPSAhRW52aXJvbm1lbnQuX2luc3RhbmNlXG4gICAgICA/IEVudmlyb25tZW50LmZhY3RvcnkoLi4uYXJncylcbiAgICAgIDogRW52aXJvbm1lbnQuX2luc3RhbmNlO1xuICAgIHJldHVybiBFbnZpcm9ubWVudC5faW5zdGFuY2UgYXMgRTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3RhdGljXG4gICAqIEBkZXNjcmlwdGlvbiBBY2N1bXVsYXRlcyB0aGUgZ2l2ZW4gdmFsdWUgaW50byB0aGUgZW52aXJvbm1lbnQuXG4gICAqIEBzdW1tYXJ5IEFkZHMgbmV3IHByb3BlcnRpZXMgdG8gdGhlIGVudmlyb25tZW50IGZyb20gdGhlIHByb3ZpZGVkIG9iamVjdC5cbiAgICogQHRlbXBsYXRlIFZcbiAgICogQHBhcmFtIHtWfSB2YWx1ZSAtIFRoZSBvYmplY3QgdG8gYWNjdW11bGF0ZSBpbnRvIHRoZSBlbnZpcm9ubWVudC5cbiAgICogQHJldHVybiB7Vn0gVGhlIHVwZGF0ZWQgZW52aXJvbm1lbnQgaW5zdGFuY2UuXG4gICAqL1xuICBzdGF0aWMgYWNjdW11bGF0ZTxWIGV4dGVuZHMgb2JqZWN0PihcbiAgICB2YWx1ZTogVlxuICApOiB0eXBlb2YgRW52aXJvbm1lbnQuX2luc3RhbmNlICZcbiAgICBWICZcbiAgICBPYmplY3RBY2N1bXVsYXRvcjx0eXBlb2YgRW52aXJvbm1lbnQuX2luc3RhbmNlICYgVj4ge1xuICAgIGNvbnN0IGluc3RhbmNlID0gRW52aXJvbm1lbnQuaW5zdGFuY2UoKTtcbiAgICByZXR1cm4gaW5zdGFuY2UuYWNjdW11bGF0ZSh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQHN0YXRpY1xuICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIHRoZSBrZXlzIG9mIHRoZSBlbnZpcm9ubWVudCwgb3B0aW9uYWxseSBjb252ZXJ0aW5nIHRoZW0gdG8gRU5WIGZvcm1hdC5cbiAgICogQHN1bW1hcnkgR2V0cyBhbGwga2V5cyBpbiB0aGUgZW52aXJvbm1lbnQsIHdpdGggYW4gb3B0aW9uIHRvIGZvcm1hdCB0aGVtIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3RvRW52PXRydWVdIC0gV2hldGhlciB0byBjb252ZXJ0IHRoZSBrZXlzIHRvIEVOViBmb3JtYXQuXG4gICAqIEByZXR1cm4ge3N0cmluZ1tdfSBBbiBhcnJheSBvZiBrZXlzIGZyb20gdGhlIGVudmlyb25tZW50LlxuICAgKi9cbiAgc3RhdGljIGtleXModG9FbnY6IGJvb2xlYW4gPSB0cnVlKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBFbnZpcm9ubWVudC5pbnN0YW5jZSgpXG4gICAgICAua2V5cygpXG4gICAgICAubWFwKChrKSA9PiAodG9FbnYgPyB0b0VOVkZvcm1hdChrKSA6IGspKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgUGFyc2VBcmdzUmVzdWx0IH0gZnJvbSBcIi4uL2lucHV0L3R5cGVzXCI7XG5pbXBvcnQgeyBDb21tYW5kT3B0aW9ucyB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBVc2VySW5wdXQgfSBmcm9tIFwiLi4vaW5wdXQvaW5wdXRcIjtcbmltcG9ydCB7IERlZmF1bHRDb21tYW5kT3B0aW9ucywgRGVmYXVsdENvbW1hbmRWYWx1ZXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGdldERlcGVuZGVuY2llcywgZ2V0UGFja2FnZVZlcnNpb24gfSBmcm9tIFwiLi4vdXRpbHMvZnNcIjtcbmltcG9ydCB7IHByaW50QmFubmVyIH0gZnJvbSBcIi4uL291dHB1dC9jb21tb25cIjtcbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSBcIi4uL3V0aWxzL2Vudmlyb25tZW50XCI7XG5pbXBvcnQge1xuICBEZWZhdWx0TG9nZ2luZ0NvbmZpZyxcbiAgTG9nZ2VyLFxuICBMb2dnaW5nLFxuICBMb2dnaW5nQ29uZmlnLFxuICBMb2dMZXZlbCxcbn0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5cbi8qKlxuICogQGNsYXNzIENvbW1hbmRcbiAqIEBhYnN0cmFjdFxuICogQHRlbXBsYXRlIEkgLSBUaGUgdHlwZSBvZiBpbnB1dCBvcHRpb25zIGZvciB0aGUgY29tbWFuZC5cbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHJldHVybiB0eXBlIG9mIHRoZSBjb21tYW5kIGV4ZWN1dGlvbi5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqIEBkZXNjcmlwdGlvbiBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBjb21tYW5kIGltcGxlbWVudGF0aW9uLlxuICogQHN1bW1hcnkgUHJvdmlkZXMgYSBzdHJ1Y3R1cmUgZm9yIGNyZWF0aW5nIGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgY29tbWFuZHMgd2l0aCBpbnB1dCBoYW5kbGluZywgbG9nZ2luZywgYW5kIGV4ZWN1dGlvbiBmbG93LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQuXG4gKiBAcGFyYW0ge0NvbW1hbmRPcHRpb25zPEk+fSBbaW5wdXRzXSAtIFRoZSBpbnB1dCBvcHRpb25zIGZvciB0aGUgY29tbWFuZC5cbiAqIEBwYXJhbSB7c3RyaW5nW119IFtyZXF1aXJlbWVudHNdIC0gVGhlIGxpc3Qgb2YgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIGZvciB0aGUgY29tbWFuZC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbW1hbmQ8SSwgUj4ge1xuICAvKipcbiAgICogQHN0YXRpY1xuICAgKiBAZGVzY3JpcHRpb24gU3RhdGljIGxvZ2dlciBmb3IgdGhlIENvbW1hbmQgY2xhc3MuXG4gICAqIEB0eXBlIHtMb2dnZXJ9XG4gICAqL1xuICBzdGF0aWMgbG9nOiBMb2dnZXI7XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGRlc2NyaXB0aW9uIEluc3RhbmNlIGxvZ2dlciBmb3IgdGhlIGNvbW1hbmQuXG4gICAqIEB0eXBlIHtMb2dnZXJ9XG4gICAqL1xuICBwcm90ZWN0ZWQgbG9nOiBMb2dnZXI7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBuYW1lOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIGlucHV0czogQ29tbWFuZE9wdGlvbnM8ST4gPSB7fSBhcyB1bmtub3duIGFzIENvbW1hbmRPcHRpb25zPEk+LFxuICAgIHByb3RlY3RlZCByZXF1aXJlbWVudHM6IHN0cmluZ1tdID0gW11cbiAgKSB7XG4gICAgaWYgKCFDb21tYW5kLmxvZykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbW1hbmQsIFwibG9nXCIsIHtcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogTG9nZ2luZy5mb3IoQ29tbWFuZC5uYW1lKSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5sb2cgPSBDb21tYW5kLmxvZztcbiAgICB9XG4gICAgdGhpcy5sb2cgPSBDb21tYW5kLmxvZy5mb3IodGhpcy5uYW1lKTtcbiAgICB0aGlzLmlucHV0cyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIERlZmF1bHRDb21tYW5kT3B0aW9ucyxcbiAgICAgIGlucHV0c1xuICAgICkgYXMgQ29tbWFuZE9wdGlvbnM8ST47XG4gIH1cblxuICAvKipcbiAgICogQHByb3RlY3RlZFxuICAgKiBAYXN5bmNcbiAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiBhbGwgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIGFyZSBwcmVzZW50LlxuICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgZGVwZW5kZW5jaWVzIGFuZCBjb21wYXJlcyBpdCBhZ2FpbnN0IHRoZSByZXF1aXJlZCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBjb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY2hlY2sgaXMgY29tcGxldGUuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IENvbW1hbmRcbiAgICogICBwYXJ0aWNpcGFudCBnZXREZXBlbmRlbmNpZXNcbiAgICogICBwYXJ0aWNpcGFudCBTZXRcbiAgICogICBDb21tYW5kLT4+Z2V0RGVwZW5kZW5jaWVzOiBDYWxsXG4gICAqICAgZ2V0RGVwZW5kZW5jaWVzLS0+PkNvbW1hbmQ6IFJldHVybiB7cHJvZCwgZGV2LCBwZWVyfVxuICAgKiAgIENvbW1hbmQtPj5TZXQ6IENyZWF0ZSBTZXQgZnJvbSBwcm9kLCBkZXYsIHBlZXJcbiAgICogICBTZXQtLT4+Q29tbWFuZDogUmV0dXJuIHVuaXF1ZSBkZXBlbmRlbmNpZXNcbiAgICogICBDb21tYW5kLT4+Q29tbWFuZDogQ29tcGFyZSBhZ2FpbnN0IHJlcXVpcmVtZW50c1xuICAgKiAgIGFsdCBNaXNzaW5nIGRlcGVuZGVuY2llc1xuICAgKiAgICAgQ29tbWFuZC0+PkNvbW1hbmQ6IEFkZCB0byBtaXNzaW5nIGxpc3RcbiAgICogICBlbmRcbiAgICogICBOb3RlIG92ZXIgQ29tbWFuZDogSWYgbWlzc2luZy5sZW5ndGggPiAwLCBoYW5kbGUgbWlzc2luZyBkZXBlbmRlbmNpZXNcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBjaGVja1JlcXVpcmVtZW50cygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHByb2QsIGRldiwgcGVlciB9ID0gYXdhaXQgZ2V0RGVwZW5kZW5jaWVzKCk7XG4gICAgY29uc3QgbWlzc2luZyA9IFtdO1xuICAgIGNvbnN0IGZ1bGxMaXN0ID0gQXJyYXkuZnJvbShcbiAgICAgIG5ldyBTZXQoWy4uLnByb2QsIC4uLmRldiwgLi4ucGVlcl0pLnZhbHVlcygpXG4gICAgKS5tYXAoKGQpID0+IGQubmFtZSk7XG4gICAgZm9yIChjb25zdCBkZXAgb2YgdGhpcy5yZXF1aXJlbWVudHMpXG4gICAgICBpZiAoIWZ1bGxMaXN0LmluY2x1ZGVzKGRlcCkpIG1pc3NpbmcucHVzaChkZXApO1xuXG4gICAgaWYgKCFtaXNzaW5nLmxlbmd0aCkgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIGhlbHAgaW5mb3JtYXRpb24gZm9yIHRoZSBjb21tYW5kLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBzaG91bGQgYmUgb3ZlcnJpZGRlbiBpbiBkZXJpdmVkIGNsYXNzZXMgdG8gcHJvdmlkZSBzcGVjaWZpYyBoZWxwIGluZm9ybWF0aW9uLlxuICAgKiBAcGFyYW0ge1BhcnNlQXJnc1Jlc3VsdH0gYXJncyAtIFRoZSBwYXJzZWQgY29tbWFuZC1saW5lIGFyZ3VtZW50cy5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIHByb3RlY3RlZCBoZWxwKGFyZ3M6IFBhcnNlQXJnc1Jlc3VsdCk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLmxvZy5pbmZvKFxuICAgICAgYFRoaXMgaXMgaGVscC4gSSdtIG5vIHVzZSBiZWNhdXNlIEkgc2hvdWxkIGhhdmUgYmVlbiBvdmVycmlkZGVuLmBcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGFic3RyYWN0XG4gICAqIEBkZXNjcmlwdGlvbiBSdW5zIHRoZSBjb21tYW5kIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGltcGxlbWVudGVkIGluIGRlcml2ZWQgY2xhc3NlcyB0byBkZWZpbmUgdGhlIGNvbW1hbmQncyBiZWhhdmlvci5cbiAgICogQHBhcmFtIHtQYXJzZUFyZ3NSZXN1bHR9IGFuc3dlcnMgLSBUaGUgcGFyc2VkIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFIgfCBzdHJpbmcgfCB2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgY29tbWFuZCdzIHJlc3VsdC5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBydW48Uj4oXG4gICAgYW5zd2VyczogTG9nZ2luZ0NvbmZpZyAmXG4gICAgICB0eXBlb2YgRGVmYXVsdENvbW1hbmRWYWx1ZXMgJiB7IFtrIGluIGtleW9mIEldOiB1bmtub3duIH1cbiAgKTogUHJvbWlzZTxSIHwgc3RyaW5nIHwgdm9pZD47XG5cbiAgLyoqXG4gICAqIEBhc3luY1xuICAgKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgdGhlIGNvbW1hbmQuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIGhhbmRsZXMgdGhlIG92ZXJhbGwgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGNvbW1hbmQsIGluY2x1ZGluZyBwYXJzaW5nIGFyZ3VtZW50cyxcbiAgICogc2V0dGluZyB1cCBsb2dnaW5nLCBjaGVja2luZyBmb3IgdmVyc2lvbiBvciBoZWxwIHJlcXVlc3RzLCBhbmQgcnVubmluZyB0aGUgY29tbWFuZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8UiB8IHN0cmluZyB8IHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kJ3MgcmVzdWx0LlxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDb21tYW5kXG4gICAqICAgcGFydGljaXBhbnQgVXNlcklucHV0XG4gICAqICAgcGFydGljaXBhbnQgTG9nZ2luZ1xuICAgKiAgIHBhcnRpY2lwYW50IGdldFBhY2thZ2VWZXJzaW9uXG4gICAqICAgcGFydGljaXBhbnQgcHJpbnRCYW5uZXJcbiAgICogICBDb21tYW5kLT4+VXNlcklucHV0OiBwYXJzZUFyZ3MoaW5wdXRzKVxuICAgKiAgIFVzZXJJbnB1dC0tPj5Db21tYW5kOiBSZXR1cm4gUGFyc2VBcmdzUmVzdWx0XG4gICAqICAgQ29tbWFuZC0+PkNvbW1hbmQ6IFByb2Nlc3Mgb3B0aW9uc1xuICAgKiAgIENvbW1hbmQtPj5Mb2dnaW5nOiBzZXRDb25maWcob3B0aW9ucylcbiAgICogICBhbHQgdmVyc2lvbiByZXF1ZXN0ZWRcbiAgICogICAgIENvbW1hbmQtPj5nZXRQYWNrYWdlVmVyc2lvbjogQ2FsbFxuICAgKiAgICAgZ2V0UGFja2FnZVZlcnNpb24tLT4+Q29tbWFuZDogUmV0dXJuIHZlcnNpb25cbiAgICogICBlbHNlIGhlbHAgcmVxdWVzdGVkXG4gICAqICAgICBDb21tYW5kLT4+Q29tbWFuZDogaGVscChhcmdzKVxuICAgKiAgIGVsc2UgYmFubmVyIHJlcXVlc3RlZFxuICAgKiAgICAgQ29tbWFuZC0+PnByaW50QmFubmVyOiBDYWxsXG4gICAqICAgZW5kXG4gICAqICAgQ29tbWFuZC0+PkNvbW1hbmQ6IHJ1bihhcmdzKVxuICAgKiAgIGFsdCBlcnJvciBvY2N1cnNcbiAgICogICAgIENvbW1hbmQtPj5Db21tYW5kOiBMb2cgZXJyb3JcbiAgICogICBlbmRcbiAgICogICBDb21tYW5kLS0+PkNvbW1hbmQ6IFJldHVybiByZXN1bHRcbiAgICovXG4gIGFzeW5jIGV4ZWN1dGUoKTogUHJvbWlzZTxSIHwgc3RyaW5nIHwgdm9pZD4ge1xuICAgIGNvbnN0IGFyZ3M6IFBhcnNlQXJnc1Jlc3VsdCA9IFVzZXJJbnB1dC5wYXJzZUFyZ3ModGhpcy5pbnB1dHMpO1xuICAgIGNvbnN0IGVudiA9IEVudmlyb25tZW50LmFjY3VtdWxhdGUoRGVmYXVsdExvZ2dpbmdDb25maWcpXG4gICAgICAuYWNjdW11bGF0ZShEZWZhdWx0Q29tbWFuZFZhbHVlcylcbiAgICAgIC5hY2N1bXVsYXRlKGFyZ3MudmFsdWVzKTtcbiAgICBjb25zdCB7IHRpbWVzdGFtcCwgdmVyYm9zZSwgdmVyc2lvbiwgaGVscCwgbG9nTGV2ZWwsIGxvZ1N0eWxlLCBiYW5uZXIgfSA9XG4gICAgICBlbnY7XG5cbiAgICB0aGlzLmxvZy5zZXRDb25maWcoe1xuICAgICAgLi4uZW52LFxuICAgICAgdGltZXN0YW1wOiAhIXRpbWVzdGFtcCxcbiAgICAgIGxldmVsOiBsb2dMZXZlbCBhcyBMb2dMZXZlbCxcbiAgICAgIHN0eWxlOiAhIWxvZ1N0eWxlLFxuICAgICAgdmVyYm9zZTogKHZlcmJvc2UgYXMgbnVtYmVyKSB8fCAwLFxuICAgIH0pO1xuXG4gICAgaWYgKHZlcnNpb24pIHtcbiAgICAgIHJldHVybiBnZXRQYWNrYWdlVmVyc2lvbigpO1xuICAgIH1cblxuICAgIGlmIChoZWxwKSB7XG4gICAgICByZXR1cm4gdGhpcy5oZWxwKGFyZ3MpO1xuICAgIH1cblxuICAgIGlmIChiYW5uZXIpXG4gICAgICBwcmludEJhbm5lcihcbiAgICAgICAgdGhpcy5sb2cuZm9yKHByaW50QmFubmVyLCB7XG4gICAgICAgICAgdGltZXN0YW1wOiBmYWxzZSxcbiAgICAgICAgICBzdHlsZTogZmFsc2UsXG4gICAgICAgICAgY29udGV4dDogZmFsc2UsXG4gICAgICAgICAgbG9nTGV2ZWw6IGZhbHNlLFxuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIGxldCByZXN1bHQ7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMucnVuKGVudik7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhpcy5sb2cuZXJyb3IoYEVycm9yIHdoaWxlIHJ1bm5pbmcgcHJvdmlkZWQgY2xpIGZ1bmN0aW9uOiAke2V9YCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQgYXMgUjtcbiAgfVxufVxuIiwiaW1wb3J0IGh0dHBzIGZyb20gXCJodHRwc1wiO1xuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBIHNpbXBsZSBIVFRQIGNsaWVudCBmb3IgZG93bmxvYWRpbmcgZmlsZXMuXG4gKiBAc3VtbWFyeSBUaGlzIGNsYXNzIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgdG8gZG93bmxvYWQgZmlsZXMgZnJvbSBIVFRQUyBVUkxzLlxuICogSXQgdXNlcyBOb2RlLmpzIGJ1aWx0LWluIGh0dHBzIG1vZHVsZSB0byBtYWtlIHJlcXVlc3RzLlxuICpcbiAqIEBjbGFzcyBIdHRwQ2xpZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBIdHRwQ2xpZW50IHtcbiAgcHJvdGVjdGVkIHN0YXRpYyBsb2cgPSBMb2dnaW5nLmZvcihIdHRwQ2xpZW50KTtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEb3dubG9hZHMgYSBmaWxlIGZyb20gYSBnaXZlbiBVUkwuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIHNlbmRzIGEgR0VUIHJlcXVlc3QgdG8gdGhlIHNwZWNpZmllZCBVUkwgYW5kIHJldHVybnMgdGhlIHJlc3BvbnNlIGJvZHkgYXMgYSBzdHJpbmcuXG4gICAqIEl0IGhhbmRsZXMgZGlmZmVyZW50IHNjZW5hcmlvcyBzdWNoIGFzIG5vbi0yMDAgc3RhdHVzIGNvZGVzIGFuZCBuZXR3b3JrIGVycm9ycy5cbiAgICpcbiAgICogQHBhcmFtIHVybCAtIFRoZSBVUkwgb2YgdGhlIGZpbGUgdG8gZG93bmxvYWQuXG4gICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZmlsZSBjb250ZW50IGFzIGEgc3RyaW5nLlxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDbGllbnRcbiAgICogICBwYXJ0aWNpcGFudCBIdHRwQ2xpZW50XG4gICAqICAgcGFydGljaXBhbnQgSFRUUFNcbiAgICogICBwYXJ0aWNpcGFudCBTZXJ2ZXJcbiAgICogICBDbGllbnQtPj5IdHRwQ2xpZW50OiBkb3dubG9hZEZpbGUodXJsKVxuICAgKiAgIEh0dHBDbGllbnQtPj5IVFRQUzogZ2V0KHVybClcbiAgICogICBIVFRQUy0+PlNlcnZlcjogR0VUIHJlcXVlc3RcbiAgICogICBTZXJ2ZXItLT4+SFRUUFM6IFJlc3BvbnNlXG4gICAqICAgSFRUUFMtLT4+SHR0cENsaWVudDogUmVzcG9uc2Ugb2JqZWN0XG4gICAqICAgYWx0IFN0YXR1cyBjb2RlIGlzIDIwMFxuICAgKiAgICAgbG9vcCBGb3IgZWFjaCBkYXRhIGNodW5rXG4gICAqICAgICAgIEhUVFBTLT4+SHR0cENsaWVudDogJ2RhdGEnIGV2ZW50XG4gICAqICAgICAgIEh0dHBDbGllbnQtPj5IdHRwQ2xpZW50OiBBY2N1bXVsYXRlIGRhdGFcbiAgICogICAgIGVuZFxuICAgKiAgICAgSFRUUFMtPj5IdHRwQ2xpZW50OiAnZW5kJyBldmVudFxuICAgKiAgICAgSHR0cENsaWVudC0tPj5DbGllbnQ6IFJlc29sdmUgd2l0aCBkYXRhXG4gICAqICAgZWxzZSBTdGF0dXMgY29kZSBpcyBub3QgMjAwXG4gICAqICAgICBIdHRwQ2xpZW50LS0+PkNsaWVudDogUmVqZWN0IHdpdGggZXJyb3JcbiAgICogICBlbmRcbiAgICovXG4gIHN0YXRpYyBhc3luYyBkb3dubG9hZEZpbGUodXJsOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGZ1bmN0aW9uIHJlcXVlc3QodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdXJsID0gZW5jb2RlVVJJKHVybCk7XG4gICAgICAgIGh0dHBzLmdldCh1cmwsIChyZXMpID0+IHtcbiAgICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgPT09IDMwMSB8fCByZXMuc3RhdHVzQ29kZSA9PT0gMzA3KVxuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3QocmVzLmhlYWRlcnMubG9jYXRpb24gYXMgc3RyaW5nKTtcblxuICAgICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICAgICAgICBIdHRwQ2xpZW50LmxvZy5lcnJvcihcbiAgICAgICAgICAgICAgYEZhaWxlZCB0byBmZXRjaCAke3VybH0gKHN0YXR1czogJHtyZXMuc3RhdHVzQ29kZX0pYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggJHt1cmx9YCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgZGF0YSA9IFwiXCI7XG4gICAgICAgICAgcmVzLm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IHtcbiAgICAgICAgICAgIGRhdGEgKz0gY2h1bms7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmVzLm9uKFwiZXJyb3JcIiwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmVzLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmVxdWVzdCh1cmwpO1xuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcIi4uL2NvbW1hbmRcIjtcbmltcG9ydCB7IENvbW1hbmRPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBEZWZhdWx0Q29tbWFuZE9wdGlvbnMsIERlZmF1bHRDb21tYW5kVmFsdWVzIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHtcbiAgY29weUZpbGUsXG4gIGRlbGV0ZVBhdGgsXG4gIGdldEFsbEZpbGVzLFxuICBnZXRQYWNrYWdlLFxuICBwYXRjaEZpbGUsXG4gIHJlYWRGaWxlLFxuICByZW5hbWVGaWxlLFxuICBydW5Db21tYW5kLFxuICB3cml0ZUZpbGUsXG59IGZyb20gXCIuLi8uLi91dGlsc1wiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IElucHV0T3B0aW9ucywgT3V0cHV0T3B0aW9ucywgcm9sbHVwLCBSb2xsdXBCdWlsZCB9IGZyb20gXCJyb2xsdXBcIjtcbmltcG9ydCB0eXBlc2NyaXB0IGZyb20gXCJAcm9sbHVwL3BsdWdpbi10eXBlc2NyaXB0XCI7XG5pbXBvcnQgY29tbW9uanMgZnJvbSBcIkByb2xsdXAvcGx1Z2luLWNvbW1vbmpzXCI7XG5pbXBvcnQgeyBub2RlUmVzb2x2ZSB9IGZyb20gXCJAcm9sbHVwL3BsdWdpbi1ub2RlLXJlc29sdmVcIjtcbmltcG9ydCBqc29uIGZyb20gXCJAcm9sbHVwL3BsdWdpbi1qc29uXCI7XG5pbXBvcnQgeyBMb2dnaW5nQ29uZmlnIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5pbXBvcnQgKiBhcyB0cyBmcm9tIFwidHlwZXNjcmlwdFwiO1xuaW1wb3J0IHsgRGlhZ25vc3RpYywgRW1pdFJlc3VsdCwgTW9kdWxlS2luZCwgU291cmNlRmlsZSB9IGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5cbmNvbnN0IFZFUlNJT05fU1RSSU5HID0gXCIjI1ZFUlNJT04jI1wiO1xuXG5lbnVtIE1vZGVzIHtcbiAgQ0pTID0gXCJjb21tb25qc1wiLFxuICBFU00gPSBcImVzMjAyMlwiLFxufVxuXG5jb25zdCBDb21tYW5kcyA9IFtcInVwZGF0ZS1zY3JpcHRzXCIsIFwidGFnLXJlbGVhc2VcIiwgXCJidWlsZC1zY3JpcHRzXCJdO1xuXG5jb25zdCBvcHRpb25zID0ge1xuICBwcm9kOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGRldjoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBkb2NzOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGNvbW1hbmRzOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGJhbm5lcjoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxufTtcblxuY29uc3QgY2pzMlRyYW5zZm9ybWVyID0gKGV4dCA9IFwiLmNqc1wiKSA9PiB7XG4gIGNvbnN0IGxvZyA9IEJ1aWxkU2NyaXB0cy5sb2cuZm9yKGNqczJUcmFuc2Zvcm1lcik7XG4gIGNvbnN0IHJlc29sdXRpb25DYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgcmV0dXJuICh0cmFuc2Zvcm1hdGlvbkNvbnRleHQ6IHRzLlRyYW5zZm9ybWF0aW9uQ29udGV4dCkgPT4ge1xuICAgIHJldHVybiAoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlRGlyID0gcGF0aC5kaXJuYW1lKHNvdXJjZUZpbGUuZmlsZU5hbWUpO1xuXG4gICAgICBmdW5jdGlvbiByZXNvbHZlUGF0aChpbXBvcnRQYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgY2FjaGVLZXkgPSBKU09OLnN0cmluZ2lmeShbc291cmNlRGlyLCBpbXBvcnRQYXRoXSk7XG4gICAgICAgIGNvbnN0IGNhY2hlZFZhbHVlID0gcmVzb2x1dGlvbkNhY2hlLmdldChjYWNoZUtleSk7XG4gICAgICAgIGlmIChjYWNoZWRWYWx1ZSAhPSBudWxsKSByZXR1cm4gY2FjaGVkVmFsdWU7XG5cbiAgICAgICAgbGV0IHJlc29sdmVkUGF0aCA9IGltcG9ydFBhdGg7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzb2x2ZWRQYXRoID0gcGF0aC5yZXNvbHZlKHNvdXJjZURpciwgcmVzb2x2ZWRQYXRoICsgXCIudHNcIik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcmVzb2x2ZSBwYXRoICR7aW1wb3J0UGF0aH06ICR7ZXJyb3J9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0YXQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc3RhdCA9IGZzLnN0YXRTeW5jKHJlc29sdmVkUGF0aCk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbG9nLnZlcmJvc2UoXG4gICAgICAgICAgICAgIGBUZXN0aW5nIGV4aXN0ZW5jZSBvZiBwYXRoICR7cmVzb2x2ZWRQYXRofSBhcyBhIGZvbGRlciBkZWZhdWx0aW5nIHRvIGluZGV4IGZpbGVgXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgc3RhdCA9IGZzLnN0YXRTeW5jKHJlc29sdmVkUGF0aC5yZXBsYWNlKC9cXC50cyQvZ20sIFwiXCIpKTtcbiAgICAgICAgICB9IGNhdGNoIChlMjogdW5rbm93bikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgRmFpbGVkIHRvIHJlc29sdmUgcGF0aCAke2ltcG9ydFBhdGh9OiAke2V9LCAke2UyfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpXG4gICAgICAgICAgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZWRQYXRoLnJlcGxhY2UoL1xcLnRzJC9nbSwgXCIvaW5kZXgudHNcIik7XG5cbiAgICAgICAgaWYgKHBhdGguaXNBYnNvbHV0ZShyZXNvbHZlZFBhdGgpKSB7XG4gICAgICAgICAgY29uc3QgZXh0ZW5zaW9uID1cbiAgICAgICAgICAgICgvXFwudHN4PyQvLmV4ZWMocGF0aC5iYXNlbmFtZShyZXNvbHZlZFBhdGgpKSB8fCBbXSlbMF0gfHwgdm9pZCAwO1xuXG4gICAgICAgICAgcmVzb2x2ZWRQYXRoID1cbiAgICAgICAgICAgIFwiLi9cIiArXG4gICAgICAgICAgICBwYXRoLnJlbGF0aXZlKFxuICAgICAgICAgICAgICBzb3VyY2VEaXIsXG4gICAgICAgICAgICAgIHBhdGgucmVzb2x2ZShcbiAgICAgICAgICAgICAgICBwYXRoLmRpcm5hbWUocmVzb2x2ZWRQYXRoKSxcbiAgICAgICAgICAgICAgICBwYXRoLmJhc2VuYW1lKHJlc29sdmVkUGF0aCwgZXh0ZW5zaW9uKSArIGV4dFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x1dGlvbkNhY2hlLnNldChjYWNoZUtleSwgcmVzb2x2ZWRQYXRoKTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVkUGF0aDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdmlzaXROb2RlKG5vZGU6IHRzLk5vZGUpOiB0cy5WaXNpdFJlc3VsdDx0cy5Ob2RlPiB7XG4gICAgICAgIGlmIChzaG91bGRNdXRhdGVNb2R1bGVTcGVjaWZpZXIobm9kZSkpIHtcbiAgICAgICAgICBpZiAodHMuaXNJbXBvcnREZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZVBhdGgobm9kZS5tb2R1bGVTcGVjaWZpZXIudGV4dCk7XG4gICAgICAgICAgICBjb25zdCBuZXdNb2R1bGVTcGVjaWZpZXIgPVxuICAgICAgICAgICAgICB0cmFuc2Zvcm1hdGlvbkNvbnRleHQuZmFjdG9yeS5jcmVhdGVTdHJpbmdMaXRlcmFsKHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtYXRpb25Db250ZXh0LmZhY3RvcnkudXBkYXRlSW1wb3J0RGVjbGFyYXRpb24oXG4gICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgIG5vZGUubW9kaWZpZXJzLFxuICAgICAgICAgICAgICBub2RlLmltcG9ydENsYXVzZSxcbiAgICAgICAgICAgICAgbmV3TW9kdWxlU3BlY2lmaWVyLFxuICAgICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0cy5pc0V4cG9ydERlY2xhcmF0aW9uKG5vZGUpKSB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZFBhdGggPSByZXNvbHZlUGF0aChub2RlLm1vZHVsZVNwZWNpZmllci50ZXh0KTtcbiAgICAgICAgICAgIGNvbnN0IG5ld01vZHVsZVNwZWNpZmllciA9XG4gICAgICAgICAgICAgIHRyYW5zZm9ybWF0aW9uQ29udGV4dC5mYWN0b3J5LmNyZWF0ZVN0cmluZ0xpdGVyYWwocmVzb2x2ZWRQYXRoKTtcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1hdGlvbkNvbnRleHQuZmFjdG9yeS51cGRhdGVFeHBvcnREZWNsYXJhdGlvbihcbiAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgbm9kZS5tb2RpZmllcnMsXG4gICAgICAgICAgICAgIG5vZGUuaXNUeXBlT25seSxcbiAgICAgICAgICAgICAgbm9kZS5leHBvcnRDbGF1c2UsXG4gICAgICAgICAgICAgIG5ld01vZHVsZVNwZWNpZmllcixcbiAgICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cy52aXNpdEVhY2hDaGlsZChub2RlLCB2aXNpdE5vZGUsIHRyYW5zZm9ybWF0aW9uQ29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHNob3VsZE11dGF0ZU1vZHVsZVNwZWNpZmllcihub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyAoXG4gICAgICAgIHwgdHMuSW1wb3J0RGVjbGFyYXRpb25cbiAgICAgICAgfCB0cy5FeHBvcnREZWNsYXJhdGlvblxuICAgICAgKSAmIHtcbiAgICAgICAgbW9kdWxlU3BlY2lmaWVyOiB0cy5TdHJpbmdMaXRlcmFsO1xuICAgICAgfSB7XG4gICAgICAgIGlmICghdHMuaXNJbXBvcnREZWNsYXJhdGlvbihub2RlKSAmJiAhdHMuaXNFeHBvcnREZWNsYXJhdGlvbihub2RlKSlcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgaWYgKG5vZGUubW9kdWxlU3BlY2lmaWVyID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gb25seSB3aGVuIG1vZHVsZSBzcGVjaWZpZXIgaXMgdmFsaWRcbiAgICAgICAgaWYgKCF0cy5pc1N0cmluZ0xpdGVyYWwobm9kZS5tb2R1bGVTcGVjaWZpZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIG9ubHkgd2hlbiBwYXRoIGlzIHJlbGF0aXZlXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhbm9kZS5tb2R1bGVTcGVjaWZpZXIudGV4dC5zdGFydHNXaXRoKFwiLi9cIikgJiZcbiAgICAgICAgICAhbm9kZS5tb2R1bGVTcGVjaWZpZXIudGV4dC5zdGFydHNXaXRoKFwiLi4vXCIpXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIG9ubHkgd2hlbiBtb2R1bGUgc3BlY2lmaWVyIGhhcyBubyBleHRlbnNpb25cbiAgICAgICAgaWYgKHBhdGguZXh0bmFtZShub2RlLm1vZHVsZVNwZWNpZmllci50ZXh0KSAhPT0gXCJcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRzLnZpc2l0Tm9kZShzb3VyY2VGaWxlLCB2aXNpdE5vZGUpIGFzIFNvdXJjZUZpbGU7XG4gICAgfTtcbiAgfTtcbn07XG5cbmV4cG9ydCBjbGFzcyBCdWlsZFNjcmlwdHMgZXh0ZW5kcyBDb21tYW5kPFxuICBDb21tYW5kT3B0aW9uczx0eXBlb2Ygb3B0aW9ucz4sXG4gIHZvaWRcbj4ge1xuICBwcml2YXRlIHJlcGxhY2VtZW50czogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBwcml2YXRlIHJlYWRvbmx5IHBrZ1ZlcnNpb246IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBwa2dOYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkJ1aWxkU2NyaXB0c1wiLFxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgRGVmYXVsdENvbW1hbmRPcHRpb25zLCBvcHRpb25zKSBhcyBDb21tYW5kT3B0aW9uczxcbiAgICAgICAgdHlwZW9mIG9wdGlvbnNcbiAgICAgID5cbiAgICApO1xuICAgIGNvbnN0IHBrZyA9IGdldFBhY2thZ2UoKSBhcyB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH07XG4gICAgY29uc3QgeyBuYW1lLCB2ZXJzaW9uIH0gPSBwa2c7XG4gICAgdGhpcy5wa2dOYW1lID0gbmFtZS5pbmNsdWRlcyhcIkBcIikgPyBuYW1lLnNwbGl0KFwiL1wiKVsxXSA6IG5hbWU7XG4gICAgdGhpcy5wa2dWZXJzaW9uID0gdmVyc2lvbjtcbiAgICB0aGlzLnJlcGxhY2VtZW50c1tWRVJTSU9OX1NUUklOR10gPSB0aGlzLnBrZ1ZlcnNpb247XG4gIH1cblxuICBwYXRjaEZpbGVzKHA6IHN0cmluZykge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLnBhdGNoRmlsZXMpO1xuICAgIGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9ID0gZ2V0UGFja2FnZSgpIGFzIGFueTtcbiAgICBsb2cuaW5mbyhgUGF0Y2hpbmcgJHtuYW1lfSAke3ZlcnNpb259IG1vZHVsZSBpbiAke3B9Li4uYCk7XG4gICAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKHApO1xuICAgIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpXG4gICAgICBmcy5yZWFkZGlyU3luYyhwLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuICAgICAgICAuZmlsdGVyKChwKSA9PiBwLmlzRmlsZSgpKVxuICAgICAgICAuZm9yRWFjaCgoZmlsZSkgPT5cbiAgICAgICAgICBwYXRjaEZpbGUocGF0aC5qb2luKGZpbGUucGFyZW50UGF0aCwgZmlsZS5uYW1lKSwgdGhpcy5yZXBsYWNlbWVudHMpXG4gICAgICAgICk7XG4gICAgbG9nLnZlcmJvc2UoYE1vZHVsZSAke25hbWV9ICR7dmVyc2lvbn0gcGF0Y2hlZCBpbiAke3B9Li4uYCk7XG4gIH1cblxuICBwcml2YXRlIHJlcG9ydERpYWdub3N0aWNzKGRpYWdub3N0aWNzOiBEaWFnbm9zdGljW10pOiB2b2lkIHtcbiAgICBkaWFnbm9zdGljcy5mb3JFYWNoKChkaWFnbm9zdGljKSA9PiB7XG4gICAgICBsZXQgbWVzc2FnZSA9IFwiRXJyb3JcIjtcbiAgICAgIGlmIChkaWFnbm9zdGljLmZpbGUgJiYgZGlhZ25vc3RpYy5zdGFydCkge1xuICAgICAgICBjb25zdCB7IGxpbmUsIGNoYXJhY3RlciB9ID1cbiAgICAgICAgICBkaWFnbm9zdGljLmZpbGUuZ2V0TGluZUFuZENoYXJhY3Rlck9mUG9zaXRpb24oZGlhZ25vc3RpYy5zdGFydCk7XG4gICAgICAgIG1lc3NhZ2UgKz0gYCAke2RpYWdub3N0aWMuZmlsZS5maWxlTmFtZX0gKCR7bGluZSArIDF9LCR7Y2hhcmFjdGVyICsgMX0pYDtcbiAgICAgIH1cbiAgICAgIG1lc3NhZ2UgKz1cbiAgICAgICAgXCI6IFwiICsgdHMuZmxhdHRlbkRpYWdub3N0aWNNZXNzYWdlVGV4dChkaWFnbm9zdGljLm1lc3NhZ2VUZXh0LCBcIlxcblwiKTtcbiAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkQ29uZmlnRmlsZShjb25maWdGaWxlTmFtZTogc3RyaW5nKSB7XG4gICAgLy8gUmVhZCBjb25maWcgZmlsZVxuICAgIGNvbnN0IGNvbmZpZ0ZpbGVUZXh0ID0gZnMucmVhZEZpbGVTeW5jKGNvbmZpZ0ZpbGVOYW1lKS50b1N0cmluZygpO1xuXG4gICAgLy8gUGFyc2UgSlNPTiwgYWZ0ZXIgcmVtb3ZpbmcgY29tbWVudHMuIEp1c3QgZmFuY2llciBKU09OLnBhcnNlXG4gICAgY29uc3QgcmVzdWx0ID0gdHMucGFyc2VDb25maWdGaWxlVGV4dFRvSnNvbihjb25maWdGaWxlTmFtZSwgY29uZmlnRmlsZVRleHQpO1xuICAgIGNvbnN0IGNvbmZpZ09iamVjdCA9IHJlc3VsdC5jb25maWc7XG4gICAgaWYgKCFjb25maWdPYmplY3QpIHtcbiAgICAgIHRoaXMucmVwb3J0RGlhZ25vc3RpY3MoW3Jlc3VsdC5lcnJvciFdKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBwYXJzZSB0c2NvbmZpZy5qc29uXCIpO1xuICAgIH1cblxuICAgIC8vIEV4dHJhY3QgY29uZmlnIGluZnJvbWF0aW9uXG4gICAgY29uc3QgY29uZmlnUGFyc2VSZXN1bHQgPSB0cy5wYXJzZUpzb25Db25maWdGaWxlQ29udGVudChcbiAgICAgIGNvbmZpZ09iamVjdCxcbiAgICAgIHRzLnN5cyxcbiAgICAgIHBhdGguZGlybmFtZShjb25maWdGaWxlTmFtZSlcbiAgICApO1xuICAgIGlmIChjb25maWdQYXJzZVJlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5yZXBvcnREaWFnbm9zdGljcyhjb25maWdQYXJzZVJlc3VsdC5lcnJvcnMpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIHBhcnNlIHRzY29uZmlnLmpzb25cIik7XG4gICAgfVxuICAgIHJldHVybiBjb25maWdQYXJzZVJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGRUcyhpc0RldjogYm9vbGVhbiwgbW9kZTogTW9kZXMsIGJ1bmRsZSA9IGZhbHNlKSB7XG4gICAgY29uc3QgbG9nID0gdGhpcy5sb2cuZm9yKHRoaXMuYnVpbGRUcyk7XG4gICAgbG9nLmluZm8oXG4gICAgICBgQnVpbGRpbmcgJHt0aGlzLnBrZ05hbWV9ICR7dGhpcy5wa2dWZXJzaW9ufSBtb2R1bGUgKCR7bW9kZX0pIGluICR7aXNEZXYgPyBcImRldlwiIDogXCJwcm9kXCJ9IG1vZGUuLi5gXG4gICAgKTtcbiAgICBsZXQgdHNDb25maWc7XG4gICAgdHJ5IHtcbiAgICAgIHRzQ29uZmlnID0gdGhpcy5yZWFkQ29uZmlnRmlsZShcIi4vdHNjb25maWcuanNvblwiKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBwYXJzZSB0c2NvbmZpZy5qc29uOiAke2V9YCk7XG4gICAgfVxuXG4gICAgaWYgKGJ1bmRsZSkge1xuICAgICAgdHNDb25maWcub3B0aW9ucy5tb2R1bGUgPSBNb2R1bGVLaW5kLkFNRDtcbiAgICAgIHRzQ29uZmlnLm9wdGlvbnMub3V0RGlyID0gXCJkaXN0XCI7XG4gICAgICB0c0NvbmZpZy5vcHRpb25zLmlzb2xhdGVkTW9kdWxlcyA9IGZhbHNlO1xuICAgICAgdHNDb25maWcub3B0aW9ucy5vdXRGaWxlID0gdGhpcy5wa2dOYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICB0c0NvbmZpZy5vcHRpb25zLm91dERpciA9IGBsaWIke21vZGUgPT09IE1vZGVzLkVTTSA/IFwiL2VzbVwiIDogXCJcIn1gO1xuICAgICAgdHNDb25maWcub3B0aW9ucy5tb2R1bGUgPVxuICAgICAgICBtb2RlID09PSBNb2Rlcy5FU00gPyBNb2R1bGVLaW5kLkVTMjAyMiA6IE1vZHVsZUtpbmQuQ29tbW9uSlM7XG4gICAgfVxuXG4gICAgaWYgKGlzRGV2KSB7XG4gICAgICB0c0NvbmZpZy5vcHRpb25zLmlubGluZVNvdXJjZU1hcCA9IHRydWU7XG4gICAgICB0c0NvbmZpZy5vcHRpb25zLnNvdXJjZU1hcCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0c0NvbmZpZy5vcHRpb25zLnNvdXJjZU1hcCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2dyYW0gPSB0cy5jcmVhdGVQcm9ncmFtKHRzQ29uZmlnLmZpbGVOYW1lcywgdHNDb25maWcub3B0aW9ucyk7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1hdGlvbnM6IHsgYmVmb3JlPzogYW55W10gfSA9IHt9O1xuICAgIGlmIChtb2RlID09PSBNb2Rlcy5DSlMpIHtcbiAgICAgIHRyYW5zZm9ybWF0aW9ucy5iZWZvcmUgPSBbY2pzMlRyYW5zZm9ybWVyKFwiLmNqc1wiKV07XG4gICAgfSBlbHNlIGlmIChtb2RlID09PSBNb2Rlcy5FU00pIHtcbiAgICAgIHRyYW5zZm9ybWF0aW9ucy5iZWZvcmUgPSBbY2pzMlRyYW5zZm9ybWVyKFwiLmpzXCIpXTtcbiAgICB9XG5cbiAgICBjb25zdCBlbWl0UmVzdWx0OiBFbWl0UmVzdWx0ID0gcHJvZ3JhbS5lbWl0KFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdHJhbnNmb3JtYXRpb25zXG4gICAgKTtcblxuICAgIGNvbnN0IGFsbERpYWdub3N0aWNzID0gdHNcbiAgICAgIC5nZXRQcmVFbWl0RGlhZ25vc3RpY3MocHJvZ3JhbSlcbiAgICAgIC5jb25jYXQoZW1pdFJlc3VsdC5kaWFnbm9zdGljcyk7XG5cbiAgICBhbGxEaWFnbm9zdGljcy5mb3JFYWNoKChkaWFnbm9zdGljKSA9PiB7XG4gICAgICBpZiAoZGlhZ25vc3RpYy5maWxlKSB7XG4gICAgICAgIGNvbnN0IHsgbGluZSwgY2hhcmFjdGVyIH0gPVxuICAgICAgICAgIGRpYWdub3N0aWMuZmlsZS5nZXRMaW5lQW5kQ2hhcmFjdGVyT2ZQb3NpdGlvbihkaWFnbm9zdGljLnN0YXJ0ISk7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0cy5mbGF0dGVuRGlhZ25vc3RpY01lc3NhZ2VUZXh0KFxuICAgICAgICAgIGRpYWdub3N0aWMubWVzc2FnZVRleHQsXG4gICAgICAgICAgXCJcXG5cIlxuICAgICAgICApO1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgJHtkaWFnbm9zdGljLmZpbGUuZmlsZU5hbWV9ICgke2xpbmUgKyAxfSwke2NoYXJhY3RlciArIDF9KTogJHttZXNzYWdlfWBcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIHRzLmZsYXR0ZW5EaWFnbm9zdGljTWVzc2FnZVRleHQoZGlhZ25vc3RpYy5tZXNzYWdlVGV4dCwgXCJcXG5cIilcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoZW1pdFJlc3VsdC5lbWl0U2tpcHBlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQnVpbGQgZmFpbGVkXCIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGQoaXNEZXY6IGJvb2xlYW4sIG1vZGU6IE1vZGVzLCBidW5kbGUgPSBmYWxzZSkge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLmJ1aWxkKTtcbiAgICBhd2FpdCB0aGlzLmJ1aWxkVHMoaXNEZXYsIG1vZGUsIGJ1bmRsZSk7XG5cbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBNb2R1bGUgJHt0aGlzLnBrZ05hbWV9ICR7dGhpcy5wa2dWZXJzaW9ufSAoJHttb2RlfSkgYnVpbHQgaW4gJHtpc0RldiA/IFwiZGV2XCIgOiBcInByb2RcIn0gbW9kZS4uLmBcbiAgICApO1xuICAgIGlmIChtb2RlID09PSBNb2Rlcy5DSlMgJiYgIWJ1bmRsZSkge1xuICAgICAgY29uc3QgZmlsZXMgPSBnZXRBbGxGaWxlcyhcbiAgICAgICAgXCJsaWJcIixcbiAgICAgICAgKGZpbGUpID0+IGZpbGUuZW5kc1dpdGgoXCIuanNcIikgJiYgIWZpbGUuaW5jbHVkZXMoXCIvZXNtL1wiKVxuICAgICAgKTtcblxuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgIGxvZy52ZXJib3NlKGBQYXRjaGluZyAke2ZpbGV9J3MgY2pzIGltcG9ydHMuLi5gKTtcbiAgICAgICAgY29uc3QgZiA9IGZpbGUucmVwbGFjZShcIi5qc1wiLCBcIi5janNcIik7XG4gICAgICAgIGF3YWl0IHJlbmFtZUZpbGUoZmlsZSwgZik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29weUFzc2V0cyhtb2RlOiBNb2Rlcykge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLmNvcHlBc3NldHMpO1xuICAgIGxldCBoYXNBc3NldHMgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgaGFzQXNzZXRzID0gZnMuc3RhdFN5bmMoXCIuL3NyYy9hc3NldHNcIikuaXNEaXJlY3RvcnkoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICByZXR1cm4gbG9nLnZlcmJvc2UoYE5vIGFzc2V0cyBmb3VuZCBpbiAuL3NyYy9hc3NldHMgdG8gY29weWApO1xuICAgIH1cbiAgICBpZiAoaGFzQXNzZXRzKVxuICAgICAgY29weUZpbGUoXG4gICAgICAgIFwiLi9zcmMvYXNzZXRzXCIsXG4gICAgICAgIGAuLyR7bW9kZSA9PT0gTW9kZXMuQ0pTID8gXCJsaWJcIiA6IFwiZGlzdFwifS9hc3NldHNgXG4gICAgICApO1xuICB9XG5cbiAgYXN5bmMgYnVpbGRDb21tYW5kcygpIHtcbiAgICBmb3IgKGNvbnN0IGNtZCBvZiBDb21tYW5kcykge1xuICAgICAgYXdhaXQgdGhpcy5idW5kbGUoTW9kZXMuQ0pTLCB0cnVlLCB0cnVlLCBgc3JjL2Jpbi8ke2NtZH0udHNgLCBjbWQpO1xuICAgICAgbGV0IGRhdGEgPSByZWFkRmlsZShgYmluLyR7Y21kfS5janNgKTtcbiAgICAgIGRhdGEgPSBcIiMhL3Vzci9iaW4vZW52IG5vZGVcXG5cIiArIGRhdGE7XG4gICAgICB3cml0ZUZpbGUoYGJpbi8ke2NtZH0uY2pzYCwgZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYnVuZGxlKFxuICAgIG1vZGU6IE1vZGVzLFxuICAgIGlzRGV2OiBib29sZWFuLFxuICAgIGlzTGliOiBib29sZWFuLFxuICAgIGVudHJ5RmlsZTogc3RyaW5nID0gXCJzcmMvaW5kZXgudHNcIixcbiAgICBuYW1lT3ZlcnJpZGU6IHN0cmluZyA9IHRoaXMucGtnTmFtZSxcbiAgICBleHRlcm5hbHM/OiBzdHJpbmdbXSxcbiAgICBpbmNsdWRlOiBzdHJpbmdbXSA9IFtcbiAgICAgIFwicHJvbXB0c1wiLFxuICAgICAgXCJzdHlsZWQtc3RyaW5nLWJ1aWxkZXJcIixcbiAgICAgIFwidHlwZWQtb2JqZWN0LWFjY3VtdWxhdG9yXCIsXG4gICAgICBcIkBkZWNhZi10cy9sb2dnaW5nXCIsXG4gICAgXVxuICApIHtcbiAgICBjb25zdCBpc0VzbSA9IG1vZGUgPT09IE1vZGVzLkVTTTtcbiAgICBjb25zdCBwa2dOYW1lID0gdGhpcy5wa2dOYW1lO1xuXG4gICAgY29uc3QgZXh0ID0gQXJyYXkuZnJvbShcbiAgICAgIG5ldyBTZXQoW1xuICAgICAgICAuLi5bXG4gICAgICAgICAgXCJmc1wiLFxuICAgICAgICAgIFwicGF0aFwiLFxuICAgICAgICAgIFwicHJvY2Vzc1wiLFxuICAgICAgICAgIFwicm9sbHVwXCIsXG4gICAgICAgICAgXCJAcm9sbHVwL3BsdWdpbi10eXBlc2NyaXB0XCIsXG4gICAgICAgICAgXCJAcm9sbHVwL3BsdWdpbi1qc29uXCIsXG4gICAgICAgICAgXCJAcm9sbHVwL3BsdWdpbi1jb21tb25qc1wiLFxuICAgICAgICAgIFwiQHJvbGx1cC9wbHVnaW4tbm9kZS1yZXNvbHZlXCIsXG4gICAgICAgICAgXCJjaGlsZF9wcm9jZXNzXCIsXG4gICAgICAgICAgXCJ0c2xpYlwiLFxuICAgICAgICAgIFwidXRpbFwiLFxuICAgICAgICAgIFwiaHR0cHNcIixcbiAgICAgICAgXSxcbiAgICAgICAgLi4uKGV4dGVybmFscyB8fCBbXSksXG4gICAgICBdKVxuICAgICk7XG5cbiAgICBjb25zdCBwbHVnaW5zID0gW1xuICAgICAgdHlwZXNjcmlwdCh7XG4gICAgICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgICAgIG1vZHVsZTogXCJlc25leHRcIixcbiAgICAgICAgICBkZWNsYXJhdGlvbjogZmFsc2UsXG4gICAgICAgICAgb3V0RGlyOiBpc0xpYiA/IFwiYmluXCIgOiBcImRpc3RcIixcbiAgICAgICAgfSxcbiAgICAgICAgaW5jbHVkZTogW1wic3JjLyoqLyoudHNcIl0sXG4gICAgICAgIGV4Y2x1ZGU6IFtcIm5vZGVfbW9kdWxlc1wiLCBcIioqLyouc3BlYy50c1wiXSxcbiAgICAgICAgdHNjb25maWc6IFwiLi90c2NvbmZpZy5qc29uXCIsXG4gICAgICB9KSxcbiAgICAgIGpzb24oKSxcbiAgICBdO1xuXG4gICAgaWYgKGlzTGliKSB7XG4gICAgICBwbHVnaW5zLnB1c2goXG4gICAgICAgIGNvbW1vbmpzKHtcbiAgICAgICAgICBpbmNsdWRlOiBbXSxcbiAgICAgICAgICBleGNsdWRlOiBleHRlcm5hbHMsXG4gICAgICAgIH0pLFxuICAgICAgICBub2RlUmVzb2x2ZSh7XG4gICAgICAgICAgcmVzb2x2ZU9ubHk6IGluY2x1ZGUsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0OiBJbnB1dE9wdGlvbnMgPSB7XG4gICAgICBpbnB1dDogZW50cnlGaWxlLFxuICAgICAgcGx1Z2luczogcGx1Z2lucyxcbiAgICAgIGV4dGVybmFsOiBleHQsXG4gICAgfTtcblxuICAgIGNvbnN0IG91dHB1dHM6IE91dHB1dE9wdGlvbnNbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgZmlsZTogYCR7aXNMaWIgPyBcImJpbi9cIiA6IFwiZGlzdC9cIn0ke25hbWVPdmVycmlkZSA/IG5hbWVPdmVycmlkZSA6IGAuYnVuZGxlLiR7IWlzRGV2ID8gXCJtaW5cIiA6IFwiXCJ9YH0ke2lzRXNtID8gXCIuZXNtXCIgOiBcIlwifS5janNgLFxuICAgICAgICBmb3JtYXQ6IGlzTGliID8gXCJjanNcIiA6IGlzRXNtID8gXCJlc21cIiA6IFwidW1kXCIsXG4gICAgICAgIG5hbWU6IHBrZ05hbWUsXG4gICAgICAgIGVzTW9kdWxlOiBpc0VzbSxcbiAgICAgICAgc291cmNlbWFwOiBpc0RldiA/IFwiaW5saW5lXCIgOiBmYWxzZSxcbiAgICAgICAgZ2xvYmFsczoge30sXG4gICAgICAgIGV4cG9ydHM6IFwiYXV0b1wiLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJ1bmRsZSA9IGF3YWl0IHJvbGx1cChpbnB1dCk7XG4gICAgICBjb25zb2xlLmxvZyhidW5kbGUud2F0Y2hGaWxlcyk7XG4gICAgICBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZU91dHB1dHMoYnVuZGxlOiBSb2xsdXBCdWlsZCkge1xuICAgICAgICBmb3IgKGNvbnN0IG91dHB1dE9wdGlvbnMgb2Ygb3V0cHV0cykge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICBjb25zdCB7IG91dHB1dCB9ID0gYXdhaXQgYnVuZGxlLndyaXRlKG91dHB1dE9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGdlbmVyYXRlT3V0cHV0cyhidW5kbGUpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGJ1bmRsZTogJHtlfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGRCeUVudihpc0RldjogYm9vbGVhbikge1xuICAgIHRyeSB7XG4gICAgICBkZWxldGVQYXRoKFwibGliXCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGRlbGV0ZVBhdGgoXCJkaXN0XCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG4gICAgZnMubWtkaXJTeW5jKFwibGliXCIpO1xuICAgIGZzLm1rZGlyU3luYyhcImRpc3RcIik7XG4gICAgYXdhaXQgdGhpcy5idWlsZChpc0RldiwgTW9kZXMuRVNNKTtcbiAgICBhd2FpdCB0aGlzLmJ1aWxkKGlzRGV2LCBNb2Rlcy5DSlMpO1xuICAgIGF3YWl0IHRoaXMuYnVuZGxlKE1vZGVzLkVTTSwgdHJ1ZSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuYnVuZGxlKE1vZGVzLkNKUywgdHJ1ZSwgZmFsc2UpO1xuICAgIHRoaXMucGF0Y2hGaWxlcyhcImxpYlwiKTtcbiAgICB0aGlzLnBhdGNoRmlsZXMoXCJkaXN0XCIpO1xuICAgIHRoaXMuY29weUFzc2V0cyhNb2Rlcy5DSlMpO1xuICAgIHRoaXMuY29weUFzc2V0cyhNb2Rlcy5FU00pO1xuICB9XG5cbiAgYXN5bmMgYnVpbGREZXYoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRCeUVudih0cnVlKTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkUHJvZCgpIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZEJ5RW52KGZhbHNlKTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkRG9jcygpIHtcbiAgICBhd2FpdCBydW5Db21tYW5kKGBucG0gaW5zdGFsbCBiZXR0ZXItZG9jcyB0YWZmeWRiYCkucHJvbWlzZTtcbiAgICBhd2FpdCBydW5Db21tYW5kKGBucHggbWFya2Rvd24taW5jbHVkZSAuL3dvcmtkb2NzL3JlYWRtZS1tZC5qc29uYCkucHJvbWlzZTtcbiAgICBhd2FpdCBydW5Db21tYW5kKFxuICAgICAgYG5weCBqc2RvYyAtYyAuL3dvcmtkb2NzL2pzZG9jcy5qc29uIC10IC4vbm9kZV9tb2R1bGVzL2JldHRlci1kb2NzYFxuICAgICkucHJvbWlzZTtcbiAgICBhd2FpdCBydW5Db21tYW5kKGBucG0gcmVtb3ZlIGJldHRlci1kb2NzIHRhZmZ5ZGJgKS5wcm9taXNlO1xuICAgIFtcbiAgICAgIHtcbiAgICAgICAgc3JjOiBcIndvcmtkb2NzL2Fzc2V0c1wiLFxuICAgICAgICBkZXN0OiBcIi4vZG9jcy93b3JrZG9jcy9hc3NldHNcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHNyYzogXCJ3b3JrZG9jcy9yZXBvcnRzL2NvdmVyYWdlXCIsXG4gICAgICAgIGRlc3Q6IFwiLi9kb2NzL3dvcmtkb2NzL3JlcG9ydHMvY292ZXJhZ2VcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHNyYzogXCJ3b3JrZG9jcy9yZXBvcnRzL2h0bWxcIixcbiAgICAgICAgZGVzdDogXCIuL2RvY3Mvd29ya2RvY3MvcmVwb3J0cy9odG1sXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzcmM6IFwid29ya2RvY3MvcmVzb3VyY2VzXCIsXG4gICAgICAgIGRlc3Q6IFwiLi9kb2NzL3dvcmtkb2NzL3Jlc291cmNlc1wiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc3JjOiBcIkxJQ0VOU0UubWRcIixcbiAgICAgICAgZGVzdDogXCIuL2RvY3MvTElDRU5TRS5tZFwiLFxuICAgICAgfSxcbiAgICBdLmZvckVhY2goKGYpID0+IHtcbiAgICAgIGNvbnN0IHsgc3JjLCBkZXN0IH0gPSBmO1xuICAgICAgY29weUZpbGUoc3JjLCBkZXN0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBydW48Uj4oXG4gICAgYW5zd2VyczogTG9nZ2luZ0NvbmZpZyAmXG4gICAgICB0eXBlb2YgRGVmYXVsdENvbW1hbmRWYWx1ZXMgJiB7IFtrIGluIGtleW9mIHR5cGVvZiBvcHRpb25zXTogdW5rbm93biB9XG4gICk6IFByb21pc2U8c3RyaW5nIHwgdm9pZCB8IFI+IHtcbiAgICBjb25zdCB7IGRldiwgcHJvZCwgZG9jcywgY29tbWFuZHMgfSA9IGFuc3dlcnM7XG5cbiAgICBpZiAoY29tbWFuZHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuYnVpbGRDb21tYW5kcygpO1xuICAgIH1cblxuICAgIGlmIChkZXYpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmJ1aWxkRGV2KCk7XG4gICAgfVxuICAgIGlmIChwcm9kKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5idWlsZFByb2QoKTtcbiAgICB9XG4gICAgaWYgKGRvY3MpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmJ1aWxkRG9jcygpO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgQnVpbGRTY3JpcHRzIH0gZnJvbSBcIi4uL2NsaS9jb21tYW5kc1wiO1xuXG5uZXcgQnVpbGRTY3JpcHRzKClcbiAgLmV4ZWN1dGUoKVxuICAudGhlbigoKSA9PiBCdWlsZFNjcmlwdHMubG9nLmluZm8oXCJTY3JpcHRzIGJ1aWx0IHN1Y2Nlc3NmdWxseS5cIikpXG4gIC5jYXRjaCgoZTogdW5rbm93bikgPT4ge1xuICAgIEJ1aWxkU2NyaXB0cy5sb2cuZXJyb3IoYEVycm9yIGJ1aWxkaW5nIHNjcmlwdHM6ICR7ZX1gKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH0pO1xuIl0sIm5hbWVzIjpbImFjdGlvbiIsInN0cmlwIiwicmVxdWlyZSQkMCIsInJlcXVpcmUkJDEiLCJjbGVhciIsImZpZ3VyZXNfMSIsInN0eWxlIiwibGluZXMiLCJ3cmFwIiwiZW50cmllc1RvRGlzcGxheSIsInV0aWwiLCJyZXF1aXJlJCQyIiwicmVxdWlyZSQkMyIsInJlcXVpcmUkJDQiLCJyZXF1aXJlJCQ1IiwicmVxdWlyZSQkNiIsInJlcXVpcmUkJDciLCJwcm9tcHQiLCJ0ZXh0Iiwic2VsZWN0IiwidG9nZ2xlIiwiZGF0ZXBhcnQiLCJtZXJpZGllbSIsImRheSIsImhvdXJzIiwibWlsbGlzZWNvbmRzIiwibWludXRlcyIsIm1vbnRoIiwic2Vjb25kcyIsInllYXIiLCJkYXRlcGFydHMiLCJyZXF1aXJlJCQ4IiwiZGF0ZSIsIm51bWJlciIsIm11bHRpc2VsZWN0IiwiYXV0b2NvbXBsZXRlIiwiYXV0b2NvbXBsZXRlTXVsdGlzZWxlY3QiLCJjb25maXJtIiwiZWxlbWVudHMiLCJwcm9tcHRzIiwicGFyc2VBcmdzIiwic3Bhd24iLCJ0cyIsIk1vZHVsZUtpbmQiLCJub2RlUmVzb2x2ZSIsInJvbGx1cCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxDQUFBQSxRQUFjLEdBQUcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxLQUFLO0dBQ2xDLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTs7QUFFekMsR0FBRSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUU7S0FDWixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLE9BQU8sT0FBTztLQUNwQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLE9BQU8sT0FBTztLQUNwQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLE9BQU8sT0FBTztLQUNwQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLE9BQU8sTUFBTTtLQUNuQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLE9BQU8sT0FBTztBQUN4Qzs7R0FFRSxJQUFJLFFBQVEsRUFBRTtLQUNaLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUUsT0FBTyxNQUFNO0tBQ25DLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUUsT0FBTyxJQUFJO0FBQ3JDOztHQUVFLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsT0FBTyxRQUFRO0dB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QUMsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLEVBQUUsTUFBTSxHQUFHLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDOztDQUVwK0IsU0FBUywyQkFBMkIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUUsT0FBTyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFD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Q0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5RDs7S0FFSSxLQUFLLENBQUMsTUFBTSxFQUFFO0FBQ2xCLEtBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFO0tBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUU5SyxLQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtPQUNkLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9JOztBQUVBLEtBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLElB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TUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEtBQUssRUFBRSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTs7Q0FFdlEsU0FBUyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLFlBQVksRUFBRSxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLFNBQVMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7O0NBRW5ZLE1BQU0sS0FBSyxHQUFHLFVBQWdCOztDQUU5QixNQUFNLE1BQU0sR0FBRzVCLGVBQW1CLEVBQUE7O0NBRWxDLE1BQU0sUUFBUSxHQUFHUSxhQUFrQixFQUFBO0FBQ25DLE9BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLO0FBQzVCLE9BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLO0FBQzVCLE9BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPOztDQUVoQyxNQUFNLFNBQVMsR0FBRyxVQUFxQjtBQUN2QyxPQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSztBQUM3QixPQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTTs7Q0FFL0IsTUFBTSxTQUFTLEdBQUdFLGtCQUF1QixFQUFBO0FBQ3pDLE9BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRO0FBQ25DLE9BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRO0FBQ25DLE9BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHO0FBQ3pCLE9BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLO0FBQzdCLE9BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxZQUFZO0FBQzNDLE9BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPO0FBQ2pDLE9BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLO0FBQzdCLE9BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPO0FBQ2pDLE9BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJOztDQUUzQixNQUFNLEtBQUssR0FBRyxxSEFBcUg7QUFDbkksQ0FBQSxNQUFNLFdBQVcsR0FBRztHQUNsQixDQUFDLEVBQUUsQ0FBQztLQUNGO0lBQ0QsS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7R0FDbkMsQ0FBQyxFQUFFLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDMUI7R0FDRSxDQUFDLEVBQUUsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQztBQUM1QjtHQUNFLENBQUMsRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzNCO0dBQ0UsQ0FBQyxFQUFFLElBQUksSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUM7QUFDL0I7R0FDRSxDQUFDLEVBQUUsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQztBQUM1QjtHQUNFLENBQUMsRUFBRSxJQUFJLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQzlCO0dBQ0UsQ0FBQyxFQUFFLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDOUI7R0FDRSxDQUFDLEVBQUUsSUFBSSxJQUFJLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQzs7RUFFbEM7QUFDRCxDQUFBLE1BQU0sV0FBVyxHQUFHO0FBQ3BCLEdBQUUsTUFBTSxFQUFFLHVGQUF1RixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7QUFDNUcsR0FBRSxXQUFXLEVBQUUsaURBQWlELENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztBQUMzRSxHQUFFLFFBQVEsRUFBRSwwREFBMEQsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO0FBQ2pGLEdBQUUsYUFBYSxFQUFFLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxHQUFHO0VBQ3ZEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztDQUVBLE1BQU0sVUFBVSxTQUFTLE1BQU0sQ0FBQztBQUNoQyxHQUFFLFdBQVcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxFQUFFO0tBQ3JCLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDZixLQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU87QUFDM0IsS0FBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7QUFDbkIsS0FBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDbkIsS0FBSSxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUM7S0FDdkQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksSUFBSSxFQUFFO0tBQ3ZDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSw0QkFBNEI7O0tBRTFELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsS0FBSyxNQUFNLElBQUksQ0FBQzs7S0FFOUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLHFCQUFxQjtBQUNsRCxLQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztLQUN4QyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztHQUVFLElBQUksS0FBSyxHQUFHO0tBQ1YsT0FBTyxJQUFJLENBQUMsSUFBSTtBQUNwQjs7R0FFRSxJQUFJLElBQUksR0FBRztLQUNULE9BQU8sSUFBSSxDQUFDLEtBQUs7QUFDckI7O0FBRUEsR0FBRSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDakIsS0FBSSxJQUFJLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDaEQ7O0FBRUEsR0FBRSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDakIsS0FBSSxJQUFJLE1BQU07QUFDZCxLQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTs7S0FFZixPQUFPLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3RDLE9BQU0sSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRTtBQUNoQyxPQUFNLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUM7QUFDbEQsT0FBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksV0FBVyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1RCxTQUFRLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSztBQUNuQyxTQUFRLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtBQUN2QixTQUFRLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztTQUNqQixPQUFPLEVBQUUsSUFBSSxDQUFDO1FBQ2YsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDaEM7O0FBRUEsS0FBSSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUs7QUFDOUMsT0FBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNySCxPQUFNLE9BQU8sR0FBRztNQUNYLEVBQUUsRUFBRSxDQUFDO0FBQ1YsS0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7S0FDekIsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNoQjs7R0FFRSxVQUFVLENBQUMsQ0FBQyxFQUFFO0FBQ2hCLEtBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQ25CLEtBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO0tBQ2YsSUFBSSxDQUFDLElBQUksRUFBRTtBQUNmOztBQUVBLEdBQUUsS0FBSyxHQUFHO0FBQ1YsS0FBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksUUFBUSxDQUFDLENBQUM7S0FDakUsSUFBSSxDQUFDLElBQUksRUFBRTtLQUNYLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxJQUFJLEdBQUc7S0FDTCxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ2hCOztBQUVBLEdBQUUsS0FBSyxHQUFHO0tBQ04sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUk7QUFDbkMsS0FBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUs7S0FDbEIsSUFBSSxDQUFDLElBQUksRUFBRTtLQUNYLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakIsS0FBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7S0FDcEIsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNoQjs7QUFFQSxHQUFFLFFBQVEsR0FBRztLQUNULElBQUksS0FBSyxHQUFHLElBQUk7O0tBRWhCLE9BQU8saUJBQWlCLENBQUMsYUFBYTtPQUNwQyxJQUFJLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQzs7QUFFcEQsT0FBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUNyQyxTQUFRLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSztTQUN0QixLQUFLLEdBQUcsS0FBSztBQUNyQjs7QUFFQSxPQUFNLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLO0FBQzFCLE1BQUssQ0FBQyxFQUFFO0FBQ1I7O0FBRUEsR0FBRSxNQUFNLEdBQUc7S0FDUCxJQUFJLE1BQU0sR0FBRyxJQUFJOztLQUVqQixPQUFPLGlCQUFpQixDQUFDLGFBQWE7QUFDMUMsT0FBTSxNQUFNLE1BQU0sQ0FBQyxRQUFRLEVBQUU7O0FBRTdCLE9BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFO0FBQ3hCLFNBQVEsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLOztTQUVwQixNQUFNLENBQUMsSUFBSSxFQUFFOztTQUViLE1BQU0sQ0FBQyxNQUFNLEVBQUU7O1NBRWY7QUFDUjs7QUFFQSxPQUFNLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSTtBQUN4QixPQUFNLE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSzs7T0FFdEIsTUFBTSxDQUFDLElBQUksRUFBRTs7T0FFYixNQUFNLENBQUMsTUFBTSxFQUFFOztBQUVyQixPQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQzs7T0FFdEIsTUFBTSxDQUFDLEtBQUssRUFBRTtBQUNwQixNQUFLLENBQUMsRUFBRTtBQUNSOztBQUVBLEdBQUUsRUFBRSxHQUFHO0FBQ1AsS0FBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7S0FDZixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUU7S0FDNUIsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLElBQUksR0FBRztBQUNULEtBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO0tBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFO0tBQzlCLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxJQUFJLEdBQUc7QUFDVCxLQUFJLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRTtLQUN6QyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ3hDLEtBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN6QyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsS0FBSyxHQUFHO0FBQ1YsS0FBSSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUU7S0FDekMsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRTtBQUN4QyxLQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLElBQUksR0FBRztBQUNULEtBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFO0tBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxJQUFJLFlBQVksUUFBUSxDQUFDLENBQUM7S0FDekcsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7R0FFRSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ1AsS0FBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDdEIsT0FBTSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUM7QUFDckIsT0FBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztPQUN6QyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ25CO0FBQ0E7O0FBRUEsR0FBRSxNQUFNLEdBQUc7QUFDWCxLQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNyQixLQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25ILEtBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDOztBQUVuQixLQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzs7QUFFalEsS0FBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7T0FDZCxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5STs7S0FFSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUMvRDs7QUFFQTs7QUFFQSxDQUFBbUIsTUFBYyxHQUFHLFVBQVU7Ozs7Ozs7Ozs7O0FDdlAzQixDQUFBLFNBQVMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFOztDQUV2USxTQUFTLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sWUFBWSxFQUFFLElBQUksSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLEdBQUcsU0FBUyxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7Q0FFblksTUFBTSxLQUFLLEdBQUcsVUFBZ0I7O0NBRTlCLE1BQU0sTUFBTSxHQUFHN0IsZUFBbUIsRUFBQTs7Q0FFbEMsTUFBTSxRQUFRLEdBQUdRLFVBQXFCO0FBQ3RDLE9BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNO0FBQzlCLE9BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLOztDQUU1QixNQUFNLFNBQVMsR0FBR0MsYUFBa0IsRUFBQTtBQUNwQyxPQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSztBQUM3QixPQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTztBQUNqQyxPQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSztBQUM3QixPQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSzs7Q0FFN0IsTUFBTSxRQUFRLEdBQUcsT0FBTzs7QUFFeEIsQ0FBQSxNQUFNLEtBQUssR0FBRyxHQUFHLElBQUksR0FBRyxLQUFLLFNBQVM7O0FBRXRDLENBQUEsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLEVBQUUsU0FBUyxLQUFLO0dBQ25DLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQztHQUNwQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLE1BQU07RUFDNUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0NBR0EsTUFBTSxZQUFZLFNBQVMsTUFBTSxDQUFDO0FBQ2xDLEdBQUUsV0FBVyxDQUFDLElBQUksR0FBRyxFQUFFLEVBQUU7S0FDckIsS0FBSyxDQUFDLElBQUksQ0FBQztLQUNYLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdDLEtBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTztBQUMzQixLQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUU7S0FDdEQsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUs7S0FDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUM7S0FDNUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUM7QUFDbEMsS0FBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLFFBQVE7QUFDckQsS0FBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRO0tBQ2hELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLDBCQUEwQixDQUFDOztLQUUxRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLEtBQUssTUFBTSxJQUFJLENBQUM7O0FBRWxELEtBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQztBQUN2QixLQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLEtBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDbkIsS0FBSSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUM7S0FDaEIsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRTtBQUNmLEtBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3ZCLE9BQU0sSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJO09BQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxPQUFNLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQUssTUFBTTtBQUNYLE9BQU0sSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLO09BQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUNoRSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUN4Qzs7S0FFSSxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ2Y7O0dBRUUsSUFBSSxLQUFLLEdBQUc7S0FDVixPQUFPLElBQUksQ0FBQyxNQUFNO0FBQ3RCOztHQUVFLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDWCxLQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNuRDs7R0FFRSxLQUFLLENBQUMsQ0FBQyxFQUFFO0tBQ1AsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25FOztBQUVBLEdBQUUsS0FBSyxHQUFHO0FBQ1YsS0FBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNuQixLQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0tBQ2YsSUFBSSxDQUFDLElBQUksRUFBRTtLQUNYLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxJQUFJLEdBQUc7S0FDTCxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ2hCOztBQUVBLEdBQUUsS0FBSyxHQUFHO0FBQ1YsS0FBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSztBQUN0QixLQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTztLQUN4QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSTtBQUNuQyxLQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSztLQUNsQixJQUFJLENBQUMsSUFBSSxFQUFFO0tBQ1gsSUFBSSxDQUFDLE1BQU0sRUFBRTtLQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDcEIsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNoQjs7QUFFQSxHQUFFLFFBQVEsR0FBRztLQUNULElBQUksS0FBSyxHQUFHLElBQUk7O0tBRWhCLE9BQU8saUJBQWlCLENBQUMsYUFBYTtPQUNwQyxJQUFJLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQzs7QUFFcEQsT0FBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDckMsU0FBUSxLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUs7U0FDdEIsS0FBSyxHQUFHLEtBQUs7QUFDckI7O0FBRUEsT0FBTSxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsS0FBSztBQUMxQixNQUFLLENBQUMsRUFBRTtBQUNSOztBQUVBLEdBQUUsTUFBTSxHQUFHO0tBQ1AsSUFBSSxNQUFNLEdBQUcsSUFBSTs7S0FFakIsT0FBTyxpQkFBaUIsQ0FBQyxhQUFhO0FBQzFDLE9BQU0sTUFBTSxNQUFNLENBQUMsUUFBUSxFQUFFOztBQUU3QixPQUFNLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtBQUN4QixTQUFRLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUM7O1NBRXBCLE1BQU0sQ0FBQyxJQUFJLEVBQUU7O1NBRWIsTUFBTSxDQUFDLE1BQU0sRUFBRTs7U0FFZjtBQUNSOztBQUVBLE9BQU0sSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUs7QUFDMUIsT0FBTSxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU87QUFDbEQsT0FBTSxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUk7QUFDeEIsT0FBTSxNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUs7QUFDNUIsT0FBTSxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUs7O09BRXBCLE1BQU0sQ0FBQyxJQUFJLEVBQUU7O09BRWIsTUFBTSxDQUFDLE1BQU0sRUFBRTs7T0FFZixNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOztPQUV0QixNQUFNLENBQUMsS0FBSyxFQUFFO0FBQ3BCLE1BQUssQ0FBQyxFQUFFO0FBQ1I7O0FBRUEsR0FBRSxFQUFFLEdBQUc7QUFDUCxLQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDOztBQUVuQixLQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFLEVBQUU7T0FDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHO0FBQ3RDOztBQUVBLEtBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ2xELEtBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRztBQUMxQixLQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUM7S0FDbkIsSUFBSSxDQUFDLElBQUksRUFBRTtLQUNYLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxJQUFJLEdBQUc7QUFDVCxLQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDOztBQUVuQixLQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFLEVBQUU7T0FDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHO0FBQ3RDOztBQUVBLEtBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ2xELEtBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRztBQUMxQixLQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUM7S0FDbkIsSUFBSSxDQUFDLElBQUksRUFBRTtLQUNYLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxNQUFNLEdBQUc7S0FDUCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtLQUMvQixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRTtLQUN4QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDOztBQUV6RCxLQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ3BELE9BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRztBQUMzQjs7QUFFQSxLQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUM7S0FDbkIsSUFBSSxDQUFDLElBQUksRUFBRTtLQUNYLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxJQUFJLEdBQUc7QUFDVCxLQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU87S0FDekIsSUFBSSxDQUFDLElBQUksRUFBRTtLQUNYLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUNaLEtBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQzFDLEtBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUMxQixLQUFJLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7O0FBRW5ELEtBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ25CLEtBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHO0FBQ3RCLEtBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQztLQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRTtLQUNqQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUMzRCxLQUFJLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUc7QUFDcEQsS0FBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHO0tBQ2hELElBQUksQ0FBQyxJQUFJLEVBQUU7S0FDWCxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsTUFBTSxHQUFHO0FBQ1gsS0FBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7O0FBRXJCLEtBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDM0IsT0FBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbEosT0FBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzlEOztLQUVJLEtBQUssQ0FBQyxNQUFNLEVBQUU7QUFDbEIsS0FBSSxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQzs7QUFFMUIsS0FBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFeE8sS0FBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7T0FDZCxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0k7O0FBRUEsS0FBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztBQUNqSDs7QUFFQTs7QUFFQSxDQUFBcUIsUUFBYyxHQUFHLFlBQVk7Ozs7Ozs7Ozs7O0NDdlA3QixNQUFNLEtBQUssR0FBRyxVQUFnQjs7Q0FFOUIsTUFBTSxRQUFRLEdBQUc5QixVQUFxQjtBQUN0QyxPQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTTs7Q0FFOUIsTUFBTSxNQUFNLEdBQUdRLGVBQW1CLEVBQUE7O0NBRWxDLE1BQU0sU0FBUyxHQUFHQyxhQUFrQixFQUFBO0FBQ3BDLE9BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLO0FBQzdCLE9BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPO0FBQ2pDLE9BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLO0FBQzdCLE9BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJO0FBQzNCLE9BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLGdCQUFnQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0NBR0EsTUFBTSxpQkFBaUIsU0FBUyxNQUFNLENBQUM7QUFDdkMsR0FBRSxXQUFXLENBQUMsSUFBSSxHQUFHLEVBQUUsRUFBRTtLQUNyQixLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ2YsS0FBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPO0tBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDO0tBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDO0tBQ25DLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO0tBQzNCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSw2QkFBNkI7QUFDMUQsS0FBSSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHO0FBQy9CLEtBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLO0FBQzdCLEtBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRztBQUM5QixLQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVk7S0FDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxJQUFJLEVBQUU7QUFDbkQsS0FBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSztBQUMvQyxPQUFNLElBQUksT0FBTyxFQUFFLEtBQUssUUFBUSxFQUFFLEVBQUUsR0FBRztTQUMvQixLQUFLLEVBQUUsRUFBRTtBQUNqQixTQUFRLEtBQUssRUFBRTtRQUNSO0FBQ1AsT0FBTSxPQUFPO0FBQ2IsU0FBUSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7QUFDakQsU0FBUSxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxXQUFXO0FBQ3pDLFNBQVEsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztBQUM5RCxTQUFRLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLFFBQVE7QUFDbkMsU0FBUSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNwQjtBQUNQLE1BQUssQ0FBQztBQUNOLEtBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDOztBQUU1QyxLQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO09BQ3hCLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDbkI7QUFDQTs7QUFFQSxHQUFFLEtBQUssR0FBRztBQUNWLEtBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUNwQyxLQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQztLQUNmLElBQUksQ0FBQyxJQUFJLEVBQUU7S0FDWCxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsUUFBUSxHQUFHO0FBQ2IsS0FBSSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQzdDOztBQUVBLEdBQUUsSUFBSSxHQUFHO0tBQ0wsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNoQjs7QUFFQSxHQUFFLEtBQUssR0FBRztLQUNOLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJO0tBQy9CLElBQUksQ0FBQyxJQUFJLEVBQUU7S0FDWCxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCLEtBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0tBQ3BCLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDaEI7O0FBRUEsR0FBRSxNQUFNLEdBQUc7QUFDWCxLQUFJLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDOztBQUV2RCxLQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDaEUsT0FBTSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUk7T0FDeEIsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNuQixNQUFLLE1BQU07QUFDWCxPQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSTtBQUN0QixPQUFNLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSztPQUNwQixJQUFJLENBQUMsSUFBSSxFQUFFO09BQ1gsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNuQixPQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztPQUNwQixJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ2xCO0FBQ0E7O0FBRUEsR0FBRSxLQUFLLEdBQUc7QUFDVixLQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQztLQUNmLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxJQUFJLEdBQUc7S0FDTCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7S0FDbkMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLElBQUksR0FBRztBQUNULEtBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtLQUNuRCxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsRUFBRSxHQUFHO0FBQ1AsS0FBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO09BQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztBQUN6QyxNQUFLLE1BQU07T0FDTCxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ25COztLQUVJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxJQUFJLEdBQUc7QUFDVCxLQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDL0MsT0FBTSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7QUFDckIsTUFBSyxNQUFNO09BQ0wsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNuQjs7S0FFSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsSUFBSSxHQUFHO0tBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUs7S0FDeEMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLEtBQUssR0FBRztLQUNOLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUU7S0FDcEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUk7S0FDdkMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLGlCQUFpQixHQUFHO0tBQ2xCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7QUFFckMsS0FBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7QUFDcEIsT0FBTSxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUs7T0FDbEIsSUFBSSxDQUFDLE1BQU0sRUFBRTtNQUNkLE1BQU0sSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDM0YsT0FBTSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDeEIsTUFBSyxNQUFNO0FBQ1gsT0FBTSxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUk7T0FDakIsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNuQjtBQUNBOztBQUVBLEdBQUUsU0FBUyxHQUFHO0FBQ2QsS0FBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRTtBQUMzRSxPQUFNLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRTtBQUN4Qjs7QUFFQSxLQUFJLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUTtLQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQztLQUMxRSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUU7QUFDWixLQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTtPQUNiLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtBQUM5QixNQUFLLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO09BQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDdEIsTUFBSyxNQUFNO0FBQ1gsT0FBTSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDeEI7QUFDQTs7QUFFQSxHQUFFLGtCQUFrQixHQUFHO0tBQ25CLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtBQUM5RCxPQUFNLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFFBQVEsRUFBRTtTQUN6QyxPQUFPLElBQUksQ0FBQyxZQUFZO0FBQ2hDOztPQUVNLE9BQU8sbUJBQW1CLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsNEJBQTRCLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQztBQUN4Ujs7QUFFQSxLQUFJLE9BQU8sRUFBRTtBQUNiOztHQUVFLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUU7S0FDekMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxRQUFRLElBQUksR0FBRyxHQUFHLGNBQWMsR0FBRyxHQUFHO0tBQzFHLElBQUksS0FBSyxFQUFFLElBQUk7O0FBRW5CLEtBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFO0FBQ3BCLE9BQU0sS0FBSyxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ2xHLE1BQUssTUFBTTtPQUNMLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLOztPQUVoRSxJQUFJLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRTtTQUNqQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDOztBQUVwQyxTQUFRLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtXQUM3RyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFO0FBQzVDLGFBQVksTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO0FBQ2pDLGFBQVksS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDNUIsWUFBVyxDQUFDO0FBQ1o7QUFDQTtBQUNBOztBQUVBLEtBQUksT0FBTyxNQUFNLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUMvQzs7O0dBR0QsZUFBZSxDQUFDLE9BQU8sRUFBRTtBQUMzQixLQUFJLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDOUIsT0FBTSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUM7QUFDcEQ7O0FBRUEsS0FBSSxJQUFJLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDO0FBQzlGLFNBQVEsVUFBVSxHQUFHLGlCQUFpQixDQUFDLFVBQVU7QUFDakQsU0FBUSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsUUFBUTs7QUFFN0MsS0FBSSxJQUFJLE1BQU07U0FDTixhQUFhLEdBQUcsRUFBRTs7QUFFMUIsS0FBSSxLQUFLLElBQUksQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO09BQzFDLElBQUksQ0FBQyxLQUFLLFVBQVUsSUFBSSxVQUFVLEdBQUcsQ0FBQyxFQUFFO0FBQzlDLFNBQVEsTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPO0FBQ2hDLFFBQU8sTUFBTSxJQUFJLENBQUMsS0FBSyxRQUFRLEdBQUcsQ0FBQyxJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFO0FBQ2xFLFNBQVEsTUFBTSxHQUFHLE9BQU8sQ0FBQyxTQUFTO0FBQ2xDLFFBQU8sTUFBTTtTQUNMLE1BQU0sR0FBRyxHQUFHO0FBQ3BCOztPQUVNLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0U7O0tBRUksT0FBTyxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDdkM7OztHQUdELGFBQWEsQ0FBQyxPQUFPLEVBQUU7QUFDekIsS0FBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtBQUNwQixPQUFNLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUM7QUFDMUM7O0FBRUEsS0FBSSxPQUFPLEVBQUU7QUFDYjs7QUFFQSxHQUFFLHdCQUF3QixHQUFHO0FBQzdCLEtBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO09BQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDNUU7O0FBRUEsS0FBSSxNQUFNLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDOztLQUVqRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRTtBQUMxQyxPQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUM7O0FBRUEsS0FBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzNCOztBQUVBLEdBQUUsTUFBTSxHQUFHO0FBQ1gsS0FBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDckIsS0FBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztBQUNyRCxLQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQzs7QUFFbkIsS0FBSSxJQUFJLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7O0FBRWpKLEtBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO0FBQzNCLE9BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyw2QkFBNkIsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3RGLE9BQU0sSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLO0FBQy9COztLQUVJLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDdkMsS0FBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDaEQ7O0FBRUE7O0FBRUEsQ0FBQXNCLGFBQWMsR0FBRyxpQkFBaUI7Ozs7Ozs7Ozs7O0FDOVJsQyxDQUFBLFNBQVMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFOztDQUV2USxTQUFTLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sWUFBWSxFQUFFLElBQUksSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLEdBQUcsU0FBUyxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7Q0FFblksTUFBTSxLQUFLLEdBQUcsVUFBZ0I7O0NBRTlCLE1BQU0sTUFBTSxHQUFHL0IsZUFBbUIsRUFBQTs7Q0FFbEMsTUFBTSxRQUFRLEdBQUdRLFVBQXFCO0FBQ3RDLE9BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLO0FBQzVCLE9BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNOztDQUU5QixNQUFNLFNBQVMsR0FBR0MsYUFBa0IsRUFBQTtBQUNwQyxPQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSztBQUM3QixPQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSztBQUM3QixPQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTztBQUNqQyxPQUFNLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSTtBQUMzQixPQUFNLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxnQkFBZ0I7O0FBRW5ELENBQUEsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUU3RSxDQUFBLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFL0UsQ0FBQSxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLEtBQUs7R0FDcEMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxVQUFVLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUM7R0FDckYsT0FBTyxLQUFLLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxTQUFTO0VBQ3RDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztDQUdBLE1BQU0sa0JBQWtCLFNBQVMsTUFBTSxDQUFDO0FBQ3hDLEdBQUUsV0FBVyxDQUFDLElBQUksR0FBRyxFQUFFLEVBQUU7S0FDckIsS0FBSyxDQUFDLElBQUksQ0FBQztBQUNmLEtBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTztBQUMzQixLQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU87QUFDL0IsS0FBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPO0tBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDekcsS0FBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDO0tBQzlDLElBQUksQ0FBQyxJQUFJLEdBQUc7QUFDaEIsT0FBTSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFBSTtNQUM5QjtLQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTztLQUM3QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksS0FBSztBQUM5QyxLQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRTtBQUN6QixLQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTtLQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQ2pDLEtBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO0tBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDekMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUs7S0FDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7S0FDcEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDNUMsS0FBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDNUMsS0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7S0FDMUIsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLElBQUksUUFBUSxDQUFDLEVBQUUsRUFBRTtBQUNuQixLQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRTtBQUNyRTs7R0FFRSxJQUFJLFFBQVEsR0FBRztBQUNqQixLQUFJLElBQUksTUFBTTtBQUNkLEtBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksT0FBTyxJQUFJLENBQUMsR0FBRyxLQUFLLFFBQVEsRUFBRSxNQUFNLEdBQUc7T0FDaEgsS0FBSyxFQUFFLElBQUksQ0FBQztNQUNiO0FBQ0wsS0FBSSxPQUFPLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJO0FBQ2pDLE9BQU0sS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUM7TUFDbEI7QUFDTDs7R0FFRSxVQUFVLENBQUMsQ0FBQyxFQUFFO0FBQ2hCLEtBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO0FBQ25CLEtBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLO0tBQy9HLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDZjs7R0FFRSxRQUFRLENBQUMsRUFBRSxFQUFFO0tBQ1gsSUFBSSxLQUFLLEdBQUcsSUFBSTs7S0FFaEIsT0FBTyxpQkFBaUIsQ0FBQyxhQUFhO0FBQzFDLE9BQU0sTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQzs7QUFFNUUsT0FBTSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDakMsT0FBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssQ0FBQyxFQUFFO0FBQ2xDLE9BQU0sS0FBSyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLE1BQU07QUFDMUQsU0FBUSxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDL0IsU0FBUSxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDckIsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUN2QixRQUFPLENBQUMsQ0FBQztBQUNULE9BQU0sS0FBSyxDQUFDLFVBQVUsR0FBRyxLQUFLO0FBQzlCLE9BQU0sTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7O0FBRW5ELE9BQU0sS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7O09BRTNDLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDaEIsTUFBSyxDQUFDLEVBQUU7QUFDUjs7QUFFQSxHQUFFLEtBQUssR0FBRztBQUNWLEtBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQ25CLEtBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQ3hCLE9BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztPQUMzRCxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ25CLE1BQUssQ0FBQztLQUNGLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxJQUFJLEdBQUc7QUFDVCxLQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7T0FDNUMsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNsQixNQUFLLE1BQU07T0FDTCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSTtBQUNwQyxPQUFNLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSztPQUNwQixJQUFJLENBQUMsSUFBSSxFQUFFO09BQ1gsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNuQixPQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztPQUNwQixJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ2xCO0FBQ0E7O0FBRUEsR0FBRSxLQUFLLEdBQUc7S0FDTixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSTtBQUNuQyxLQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSztLQUNuQixJQUFJLENBQUMsSUFBSSxFQUFFO0tBQ1gsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQixLQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztLQUNwQixJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ2hCOztBQUVBLEdBQUUsTUFBTSxHQUFHO0FBQ1gsS0FBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUk7S0FDaEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUs7S0FDbEMsSUFBSSxDQUFDLElBQUksRUFBRTtLQUNYLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakIsS0FBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7S0FDcEIsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNoQjs7QUFFQSxHQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFO0FBQ1osS0FBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM3QyxLQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDMUMsS0FBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQztBQUMvQixLQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUMxQixJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsTUFBTSxHQUFHO0tBQ1AsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDN0MsS0FBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDakQsS0FBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0tBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLEtBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0tBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO0tBQzdCLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxhQUFhLEdBQUc7QUFDbEIsS0FBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDNUUsS0FBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM3QyxLQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0tBQzFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLEtBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0tBQzFCLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxLQUFLLEdBQUc7QUFDVixLQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0tBQ2xCLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxJQUFJLEdBQUc7S0FDTCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztLQUM1QyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsRUFBRSxHQUFHO0FBQ1AsS0FBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO09BQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2xELE1BQUssTUFBTTtPQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDdEM7O0tBRUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLElBQUksR0FBRztBQUNULEtBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNyRCxPQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLE1BQUssTUFBTTtPQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDdEM7O0tBRUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLElBQUksR0FBRztBQUNULEtBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNyRCxPQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO01BQ25CLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzs7S0FFdkMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLFFBQVEsR0FBRztLQUNULElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDaEYsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLFFBQVEsR0FBRztBQUNiLEtBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztLQUN0RCxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsSUFBSSxHQUFHO0tBQ0wsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUU7S0FDeEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7S0FDN0IsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLEtBQUssR0FBRztBQUNWLEtBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFO0tBQ3hFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO0tBQzdCLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0dBRUUsWUFBWSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUMzQyxLQUFJLElBQUksSUFBSTtBQUNaLEtBQUksSUFBSSxNQUFNLEdBQUcsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEdBQUcsS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEdBQUcsR0FBRztBQUM1RSxLQUFJLElBQUksS0FBSyxHQUFHLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSztBQUNuRSxLQUFJLE1BQU0sR0FBRyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLE1BQU07O0FBRTFFLEtBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFO09BQ2pCLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7O0FBRWxDLE9BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1NBQzdHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUU7V0FDaEMsTUFBTSxFQUFFLENBQUM7QUFDbkIsV0FBVSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUMxQixVQUFTLENBQUM7QUFDVjtBQUNBOztBQUVBLEtBQUksT0FBTyxNQUFNLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7QUFDeEQ7O0FBRUEsR0FBRSxNQUFNLEdBQUc7QUFDWCxLQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNyQixLQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQy9HLEtBQUssQ0FBQyxNQUFNLEVBQUU7O0FBRWxCLEtBQUksSUFBSSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUYsU0FBUSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsVUFBVTtBQUNqRCxTQUFRLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxRQUFROztBQUU3QyxLQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDOztBQUVsUixLQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ3BCLE9BQU0sTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxLQUFLLFFBQVEsR0FBRyxDQUFDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO09BQ25QLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxXQUFXLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hGOztLQUVJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQy9E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QUFJLENBQUM7R0FDcEI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsRUFBQSxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSTtBQUN0QixJQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsV0FBVztBQUMxQixJQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7R0FDcEI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0VBR0EsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLElBQUksUUFBUSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztFQUdBLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLFFBQVEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0VBR0EsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLElBQUksUUFBUSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUM7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsRUFBQSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSTtBQUNqQixJQUFFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksR0FBRztBQUNuQyxJQUFFLE9BQU8sUUFBUSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUU7QUFDdEMsTUFBSSxRQUFRLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxF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RSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLHVJQUF1SSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxFQUFFLE1BQU0sR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQzs7Q0FFcCtCLFNBQVMsMkJBQTJCLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLE9BQU8s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LEdBQUcsQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0tBQzdEO0FBQ0g7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMxWUE7Ozs7QUFJRztBQUNILE1BQU0sTUFB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LEdBQUcsRUFBRSwyQkFBMkI7QUFDaEMsZ0JBQUEsSUFBSSxFQUFFLGtDQUFrQztBQUN6QyxhQUFBO0FBQ0QsWUFBQTtBQUNFLGdCQUFBLEdBQUcsRUFBRSx1QkFBdUI7QUFDNUIsZ0JBQUEsSUFBSSxFQUFFLDhCQUE4QjtBQUNyQyxhQUFBO0FBQ0QsWUFBQTtBQUNFLGdCQUFBLEdBQUcsRUFBRSxvQkFBb0I7QUFDekIsZ0JBQUEsSUFBSSxFQUFFLDJCQUEyQjtBQUNsQyxhQUFBO0FBQ0QsWUFBQTtBQUNFLGdCQUFBLEdBQUcsRUFBRSxZQUFZO0FBQ2pCLGdCQUFBLElBQUksRUFBRSxtQkFBbUI7QUFDMUIsYUFBQTtBQUNGLFNBQUEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUk7QUFDZCxZQUFBLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztBQUN2QixZQUFBLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO0FBQ3JCLFNBQUMsQ0FBQzs7SUFHTSxNQUFNLEdBQUcsQ0FDakIsT0FDd0UsRUFBQTtRQUV4RSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsT0FBTztRQUU3QyxJQUFJLFFBQVEsRUFBRTtBQUNaLFlBQUEsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFOztRQUc1QixJQUFJLEdBQUcsRUFBRTtBQUNQLFlBQUEsT0FBTyxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUU7O1FBRTlCLElBQUksSUFBSSxFQUFFO0FBQ1IsWUFBQSxPQUFPLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRTs7UUFFL0IsSUFBSSxJQUFJLEVBQUU7QUFDUixZQUFBLE9BQU8sTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFOzs7QUFHbEM7O0FDcGlCRCxJQUFJLFlBQVk7QUFDYixLQUFBLE9BQU87QUFDUCxLQUFBLElBQUksQ0FBQyxNQUFNLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDO0FBQy9ELEtBQUEsS0FBSyxDQUFDLENBQUMsQ0FBVSxLQUFJO0lBQ3BCLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQTJCLHdCQUFBLEVBQUEsQ0FBQyxDQUFFLENBQUEsQ0FBQztBQUN0RCxJQUFBLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLENBQUMsQ0FBQzs7IiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzldfQ==