@firestitch/report 18.12.0 → 18.13.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 (40) hide show
  1. package/app/reports/components/component-grid/component-grid.component.d.ts +5 -1
  2. package/app/reports/components/component-grid/report-grid-cell.pipe.d.ts +11 -0
  3. package/app/reports/components/report-component/report-component.component.d.ts +0 -1
  4. package/app/reports/export/report-export-collector.service.d.ts +8 -1
  5. package/app/reports/export/report-filter-lines.d.ts +2 -0
  6. package/app/reports/export/report-grid-export.d.ts +20 -0
  7. package/app/reports/export/report-pdf.service.d.ts +2 -0
  8. package/app/reports/export/report-pptx.service.d.ts +1 -0
  9. package/app/reports/group-by.d.ts +3 -0
  10. package/app/reports/interfaces/report-export-snapshot.interface.d.ts +2 -0
  11. package/app/reports/interfaces/report.interface.d.ts +7 -0
  12. package/app/reports/report-filter-items.d.ts +1 -1
  13. package/app/reports/report-grid-layout.d.ts +8 -2
  14. package/app/reports/services/report-filter-state.service.d.ts +8 -1
  15. package/app/reports/tile-data-state.d.ts +2 -2
  16. package/esm2022/app/reports/components/component-grid/component-grid.component.mjs +34 -7
  17. package/esm2022/app/reports/components/component-grid/report-grid-cell.pipe.mjs +41 -0
  18. package/esm2022/app/reports/components/report-component/report-component.component.mjs +15 -19
  19. package/esm2022/app/reports/data/report.data.mjs +3 -3
  20. package/esm2022/app/reports/export/report-export-collector.service.mjs +72 -7
  21. package/esm2022/app/reports/export/report-filter-lines.mjs +68 -1
  22. package/esm2022/app/reports/export/report-grid-export.mjs +48 -0
  23. package/esm2022/app/reports/export/report-pdf.service.mjs +47 -17
  24. package/esm2022/app/reports/export/report-pptx.service.mjs +48 -4
  25. package/esm2022/app/reports/group-by.mjs +13 -0
  26. package/esm2022/app/reports/interfaces/report-export-snapshot.interface.mjs +1 -1
  27. package/esm2022/app/reports/interfaces/report.interface.mjs +1 -1
  28. package/esm2022/app/reports/report-filter-items.mjs +9 -7
  29. package/esm2022/app/reports/report-grid-layout.mjs +57 -4
  30. package/esm2022/app/reports/services/report-filter-state.service.mjs +124 -38
  31. package/esm2022/app/reports/tile-data-state.mjs +12 -17
  32. package/esm2022/app/reports/views/report/fs-ai-report.component.mjs +2 -2
  33. package/esm2022/app/reports/views/report/report.component.mjs +2 -2
  34. package/fesm2022/{firestitch-report-echarts-CoaGXKET.mjs → firestitch-report-echarts-EecIloKo.mjs} +2 -2
  35. package/fesm2022/{firestitch-report-echarts-CoaGXKET.mjs.map → firestitch-report-echarts-EecIloKo.mjs.map} +1 -1
  36. package/fesm2022/{firestitch-report-firestitch-report-CHPA7sla.mjs → firestitch-report-firestitch-report-DbdLxQSE.mjs} +566 -116
  37. package/fesm2022/firestitch-report-firestitch-report-DbdLxQSE.mjs.map +1 -0
  38. package/fesm2022/firestitch-report.mjs +1 -1
  39. package/package.json +2 -2
  40. package/fesm2022/firestitch-report-firestitch-report-CHPA7sla.mjs.map +0 -1
@@ -0,0 +1,13 @@
1
+ // Whether a component is a chart on a time x-axis.
2
+ export function isTimeSeriesChart(component) {
3
+ return component.type === 'chart' && component.config?.xAxis?.kind === 'time';
4
+ }
5
+ // Whether the report's group-by grain applies to a tile: the server names the
6
+ // field it re-buckets (followsGroupBy) on a time-series chart and on a table
7
+ // over a time axis, and drops the grain for every other tile. A server that
8
+ // predates tables following the group-by names none, and there a chart on a
9
+ // time x-axis is the only tile that follows it.
10
+ export function followsGroupBy(component) {
11
+ return !!component.followsGroupBy || isTimeSeriesChart(component);
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtYnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvZ3JvdXAtYnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsbURBQW1EO0FBQ25ELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxTQUEwQjtJQUMxRCxPQUFPLFNBQVMsQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksS0FBSyxNQUFNLENBQUM7QUFDaEYsQ0FBQztBQUVELDhFQUE4RTtBQUM5RSw2RUFBNkU7QUFDN0UsNEVBQTRFO0FBQzVFLDRFQUE0RTtBQUM1RSxnREFBZ0Q7QUFDaEQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxTQUEwQjtJQUN2RCxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsY0FBYyxJQUFJLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3BFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXBvcnRDb21wb25lbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5cblxuLy8gV2hldGhlciBhIGNvbXBvbmVudCBpcyBhIGNoYXJ0IG9uIGEgdGltZSB4LWF4aXMuXG5leHBvcnQgZnVuY3Rpb24gaXNUaW1lU2VyaWVzQ2hhcnQoY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNvbXBvbmVudC50eXBlID09PSAnY2hhcnQnICYmIGNvbXBvbmVudC5jb25maWc/LnhBeGlzPy5raW5kID09PSAndGltZSc7XG59XG5cbi8vIFdoZXRoZXIgdGhlIHJlcG9ydCdzIGdyb3VwLWJ5IGdyYWluIGFwcGxpZXMgdG8gYSB0aWxlOiB0aGUgc2VydmVyIG5hbWVzIHRoZVxuLy8gZmllbGQgaXQgcmUtYnVja2V0cyAoZm9sbG93c0dyb3VwQnkpIG9uIGEgdGltZS1zZXJpZXMgY2hhcnQgYW5kIG9uIGEgdGFibGVcbi8vIG92ZXIgYSB0aW1lIGF4aXMsIGFuZCBkcm9wcyB0aGUgZ3JhaW4gZm9yIGV2ZXJ5IG90aGVyIHRpbGUuIEEgc2VydmVyIHRoYXRcbi8vIHByZWRhdGVzIHRhYmxlcyBmb2xsb3dpbmcgdGhlIGdyb3VwLWJ5IG5hbWVzIG5vbmUsIGFuZCB0aGVyZSBhIGNoYXJ0IG9uIGFcbi8vIHRpbWUgeC1heGlzIGlzIHRoZSBvbmx5IHRpbGUgdGhhdCBmb2xsb3dzIGl0LlxuZXhwb3J0IGZ1bmN0aW9uIGZvbGxvd3NHcm91cEJ5KGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50KTogYm9vbGVhbiB7XG4gIHJldHVybiAhIWNvbXBvbmVudC5mb2xsb3dzR3JvdXBCeSB8fCBpc1RpbWVTZXJpZXNDaGFydChjb21wb25lbnQpO1xufVxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWV4cG9ydC1zbmFwc2hvdC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvaW50ZXJmYWNlcy9yZXBvcnQtZXhwb3J0LXNuYXBzaG90LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVwb3J0U3RhdGVTbmFwc2hvdCB9IGZyb20gJy4vcmVwb3J0LXN0YXRlLXNuYXBzaG90LmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRWaWV3ZXJGZWF0dXJlIH0gZnJvbSAnLi9yZXBvcnQtdmlld2VyLWZlYXR1cmUudHlwZSc7XG5pbXBvcnQge1xuICBDaGFydEdyYW51bGFyaXR5LFxuICBDb21wb25lbnREYXRhU3RhdGUsXG4gIEZpbHRlckdyb3VwVmFsdWUsXG4gIFJlcG9ydEZvcm1hdENvbnRleHQsXG4gIFJlcG9ydFJlbGF0aXZlUmFuZ2UsXG4gIFJlc29sdmVkRmlsdGVyVmFsdWUsXG59IGZyb20gJy4vcmVwb3J0LmludGVyZmFjZSc7XG5cblxuLy8gVGhlIHNjcmVlbiBhcyBvbmUgZXhwb3J0IHJlYWRzIGl0LCB0YWtlbiBvbmNlIHdoZW4gdGhlIGV4cG9ydCBzdGFydHNcbi8vIChSZXBvcnRFeHBvcnRDb2xsZWN0b3JTZXJ2aWNlLnNuYXBzaG90KSwgc28gZXZlcnkgdGlsZSwgdGhlIGZpbHRlciBsaW5lc1xuLy8gYW5kIHRoZSBjb3ZlciBvZiBvbmUgZmlsZSBob2xkIHRoZSBzYW1lIHN0YXRlLCB3aGF0ZXZlciB0aGUgdmlld2VyIGNoYW5nZXNcbi8vIHdoaWxlIHRoZSB0aWxlcyBhcmUgZmV0Y2hlZC5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0RXhwb3J0U25hcHNob3Qge1xuICAvLyBUaGUgZHVyYWJsZSBzdGF0ZSAoUmVwb3J0RmlsdGVyU3RhdGVTZXJ2aWNlLnNuYXBzaG90KS5cbiAgc3RhdGU6IFJlcG9ydFN0YXRlU25hcHNob3Q7XG4gIC8vIEVhY2ggZ3JvdXAncyB2YWx1ZSBhcyB0aGUgYmFyIGhvbGRzIGl0LCBieSBncm91cCBpZC4gQSBncm91cCB3aXRoXG4gIC8vIG5vdGhpbmcgc2V0IGlzIGxlZnQgb3V0LlxuICB2YWx1ZXM6IFJlY29yZDxudW1iZXIsIEZpbHRlckdyb3VwVmFsdWU+O1xuICAvLyBUaGUgcmVsYXRpdmUgcmFuZ2UgZWFjaCBkYXRlIGdyb3VwIHN0aWxsIGlzLCBieSBncm91cCBpZC5cbiAgcHJlc2V0czogUmVjb3JkPG51bWJlciwgUmVwb3J0UmVsYXRpdmVSYW5nZT47XG4gIC8vIEVhY2ggdGlsZSdzIGZpbHRlciBlbnRyaWVzLCBieSBjb21wb25lbnQgaWQuXG4gIGZpbHRlcnM6IFJlY29yZDxudW1iZXIsIFJlc29sdmVkRmlsdGVyVmFsdWVbXT47XG4gIC8vIEVhY2ggaW5saW5lIHZhbHVlJ3MgZmlsdGVyIGVudHJpZXMsIGJ5IGNvbXBvbmVudCBpZDogd2hhdCBpdHMgbGF5ZXInc1xuICAvLyB2YWx1ZXMgcmVxdWVzdCBjYXJyaWVzLlxuICB2YWx1ZUZpbHRlcnM6IFJlY29yZDxudW1iZXIsIFJlc29sdmVkRmlsdGVyVmFsdWVbXT47XG4gIC8vIEVhY2ggdGlsZSdzIHN0YXRlICh0aWxlRGF0YVN0YXRlKSwgYnkgY29tcG9uZW50IGlkLlxuICBzdGF0ZXM6IFJlY29yZDxudW1iZXIsIENvbXBvbmVudERhdGFTdGF0ZT47XG4gIC8vIFRoZSBncm91cC1ieSBncmFpbiwgb3IgbnVsbC5cbiAgZnJlcXVlbmN5OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbDtcbiAgLy8gVGhlIHZpZXdlciBmZWF0dXJlcyB0aGUgc2VydmVyIHNlcnZlcyBhbmQgdGhpcyB2aWV3ZXIgaW1wbGVtZW50cy5cbiAgZmVhdHVyZXM6IFJlcG9ydFZpZXdlckZlYXR1cmVbXTtcbiAgLy8gSG93IHRoZSByZXBvcnQgd3JpdGVzIGl0cyBudW1iZXJzIGFuZCBkYXRlcy5cbiAgZm9ybWF0Q29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dDtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWV4cG9ydC1zbmFwc2hvdC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvaW50ZXJmYWNlcy9yZXBvcnQtZXhwb3J0LXNuYXBzaG90LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR3JpZEV4cGFuc2lvbiB9IGZyb20gJ0BmaXJlc3RpdGNoL2dyaWQnO1xuXG5pbXBvcnQgeyBSZXBvcnRTdGF0ZVNuYXBzaG90IH0gZnJvbSAnLi9yZXBvcnQtc3RhdGUtc25hcHNob3QuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcG9ydFZpZXdlckZlYXR1cmUgfSBmcm9tICcuL3JlcG9ydC12aWV3ZXItZmVhdHVyZS50eXBlJztcbmltcG9ydCB7XG4gIENoYXJ0R3JhbnVsYXJpdHksXG4gIENvbXBvbmVudERhdGFTdGF0ZSxcbiAgRmlsdGVyR3JvdXBWYWx1ZSxcbiAgUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgUmVwb3J0UmVsYXRpdmVSYW5nZSxcbiAgUmVzb2x2ZWRGaWx0ZXJWYWx1ZSxcbn0gZnJvbSAnLi9yZXBvcnQuaW50ZXJmYWNlJztcblxuXG4vLyBUaGUgc2NyZWVuIGFzIG9uZSBleHBvcnQgcmVhZHMgaXQsIHRha2VuIG9uY2Ugd2hlbiB0aGUgZXhwb3J0IHN0YXJ0c1xuLy8gKFJlcG9ydEV4cG9ydENvbGxlY3RvclNlcnZpY2Uuc25hcHNob3QpLCBzbyBldmVyeSB0aWxlLCB0aGUgZmlsdGVyIGxpbmVzXG4vLyBhbmQgdGhlIGNvdmVyIG9mIG9uZSBmaWxlIGhvbGQgdGhlIHNhbWUgc3RhdGUsIHdoYXRldmVyIHRoZSB2aWV3ZXIgY2hhbmdlc1xuLy8gd2hpbGUgdGhlIHRpbGVzIGFyZSBmZXRjaGVkLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRFeHBvcnRTbmFwc2hvdCB7XG4gIC8vIFRoZSBkdXJhYmxlIHN0YXRlIChSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2Uuc25hcHNob3QpLlxuICBzdGF0ZTogUmVwb3J0U3RhdGVTbmFwc2hvdDtcbiAgLy8gRWFjaCBncm91cCdzIHZhbHVlIGFzIHRoZSBiYXIgaG9sZHMgaXQsIGJ5IGdyb3VwIGlkLiBBIGdyb3VwIHdpdGhcbiAgLy8gbm90aGluZyBzZXQgaXMgbGVmdCBvdXQuXG4gIHZhbHVlczogUmVjb3JkPG51bWJlciwgRmlsdGVyR3JvdXBWYWx1ZT47XG4gIC8vIFRoZSByZWxhdGl2ZSByYW5nZSBlYWNoIGRhdGUgZ3JvdXAgc3RpbGwgaXMsIGJ5IGdyb3VwIGlkLlxuICBwcmVzZXRzOiBSZWNvcmQ8bnVtYmVyLCBSZXBvcnRSZWxhdGl2ZVJhbmdlPjtcbiAgLy8gRWFjaCB0aWxlJ3MgZmlsdGVyIGVudHJpZXMsIGJ5IGNvbXBvbmVudCBpZC5cbiAgZmlsdGVyczogUmVjb3JkPG51bWJlciwgUmVzb2x2ZWRGaWx0ZXJWYWx1ZVtdPjtcbiAgLy8gRWFjaCBpbmxpbmUgdmFsdWUncyBmaWx0ZXIgZW50cmllcywgYnkgY29tcG9uZW50IGlkOiB3aGF0IGl0cyBsYXllcidzXG4gIC8vIHZhbHVlcyByZXF1ZXN0IGNhcnJpZXMuXG4gIHZhbHVlRmlsdGVyczogUmVjb3JkPG51bWJlciwgUmVzb2x2ZWRGaWx0ZXJWYWx1ZVtdPjtcbiAgLy8gRWFjaCB0aWxlJ3Mgc3RhdGUgKHRpbGVEYXRhU3RhdGUpLCBieSBjb21wb25lbnQgaWQ7IGEgdGFibGUncyBhZGRzIHRoZVxuICAvLyBsYXlvdXQgdGhlIHZpZXdlciBwdXQgaXQgaW4uXG4gIHN0YXRlczogUmVjb3JkPG51bWJlciwgQ29tcG9uZW50RGF0YVN0YXRlPjtcbiAgLy8gVGhlIGdyb3VwcyBlYWNoIHRhYmxlIHRpbGUgaG9sZHMgb3BlbiwgYnkgY29tcG9uZW50IGlkLlxuICBncmlkRXhwYW5zaW9ucz86IFJlY29yZDxudW1iZXIsIEdyaWRFeHBhbnNpb24+O1xuICAvLyBUaGUgZ3JvdXAtYnkgZ3JhaW4sIG9yIG51bGwuXG4gIGZyZXF1ZW5jeTogQ2hhcnRHcmFudWxhcml0eSB8IG51bGw7XG4gIC8vIFRoZSB2aWV3ZXIgZmVhdHVyZXMgdGhlIHNlcnZlciBzZXJ2ZXMgYW5kIHRoaXMgdmlld2VyIGltcGxlbWVudHMuXG4gIGZlYXR1cmVzOiBSZXBvcnRWaWV3ZXJGZWF0dXJlW107XG4gIC8vIEhvdyB0aGUgcmVwb3J0IHdyaXRlcyBpdHMgbnVtYmVycyBhbmQgZGF0ZXMuXG4gIGZvcm1hdENvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQ7XG59XG4iXX0=
@@ -27,4 +27,4 @@ export var ReportState;
27
27
  ReportState["Active"] = "active";
28
28
  ReportState["Deleted"] = "deleted";
29
29
  })(ReportState || (ReportState = {}));
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkVBQTZFO0FBQzdFLG1FQUFtRTtBQUNuRSwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLG1DQUFtQztBQTRTbkMsNEVBQTRFO0FBQzVFLDJFQUEyRTtBQUMzRSx1REFBdUQ7QUFDdkQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWdEO0lBQzlFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO0lBQzdCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0lBQy9CLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0lBQ2pDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO0lBQ3JDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0NBQ3BDLENBQUM7QUFndEJGLE1BQU0sQ0FBTixJQUFZLGNBR1g7QUFIRCxXQUFZLGNBQWM7SUFDeEIsbUNBQWlCLENBQUE7SUFDakIsbUNBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUhXLGNBQWMsS0FBZCxjQUFjLFFBR3pCO0FBdUJELGdGQUFnRjtBQUNoRixpRkFBaUY7QUFDakYsNkVBQTZFO0FBQzdFLDBFQUEwRTtBQUMxRSxNQUFNLENBQU4sSUFBWSxXQUdYO0FBSEQsV0FBWSxXQUFXO0lBQ3JCLGdDQUFpQixDQUFBO0lBQ2pCLGtDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFIVyxXQUFXLEtBQVgsV0FBVyxRQUd0QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSBhc3NlbWJsZWQgcmVwb3J0IHN0cnVjdHVyZSByZXR1cm5lZCBieSBHRVQgL2FwaS9yZXBvcnRzLzppZCDigJQgY29tcG9zZWRcbi8vIHNlcnZlci1zaWRlIGZyb20gdGhlIG5vcm1hbGl6ZWQgdGFibGVzIChyZXBvcnRzIOKGkiByZXBvcnRfcGFnZXMg4oaSXG4vLyByZXBvcnRfY29tcG9uZW50cyArIHJlcG9ydF9maWx0ZXJzLCBwbHVzIHJlcG9ydF9maWx0ZXJfZ3JvdXBzKS4gQWxsIGtleXMgYXJlXG4vLyBjYW1lbENhc2U7IGNvbXBvbmVudCBgY29uZmlnYCBpcyB0aGUgc3RhbmRhcmQgZm9ybWF0IHRoZSByZW5kZXJlciBtYXBzIHRvXG4vLyBFQ2hhcnRzIG9wdGlvbnMgLyBGc0xpc3QgY29uZmlnLlxuXG5pbXBvcnQgeyBSZXBvcnRDaGFuZ2VQb2xhcml0eSB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1jaGFuZ2UtcG9sYXJpdHkuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRDaGFydENvbG9yIH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWNoYXJ0LWNvbG9yLmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0Q2hhcnREYXRhTGFiZWxzIH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWNoYXJ0LWRhdGEtbGFiZWxzLmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0Q2hhcnREYXRlTGFiZWwgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtY2hhcnQtZGF0ZS1sYWJlbC5lbnVtJztcbmltcG9ydCB7IFJlcG9ydENoYXJ0TGluZVN0eWxlIH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWNoYXJ0LWxpbmUtc3R5bGUuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRDaGFydE1hcmtTdGF0IH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWNoYXJ0LW1hcmstc3RhdC5lbnVtJztcbmltcG9ydCB7IFJlcG9ydExpc3RDb2x1bW5Gb3JtYXQgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtbGlzdC1jb2x1bW4tZm9ybWF0LmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0TnVtYmVyVW5pdHMgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtbnVtYmVyLXVuaXRzLmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0VmFsdWVGb3JtYXQgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtdmFsdWUtZm9ybWF0LmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0VmFsdWVGb3JtdWxhIH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LXZhbHVlLWZvcm11bGEuZW51bSc7XG5cbmltcG9ydCB7IENvbXBvbmVudERhdGFBcHBsaWVkIH0gZnJvbSAnLi9jb21wb25lbnQtZGF0YS1hcHBsaWVkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb21wb25lbnREYXRhRHJpbGwgfSBmcm9tICcuL2NvbXBvbmVudC1kYXRhLWRyaWxsLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnREcmlsbFN0ZXAgfSBmcm9tICcuL3JlcG9ydC1kcmlsbC1zdGVwLmludGVyZmFjZSc7XG5pbXBvcnQgeyBHcmlkQ29uZmlnIH0gZnJvbSAnLi9yZXBvcnQtZ3JpZC1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcG9ydFZpZXdlckZlYXR1cmUgfSBmcm9tICcuL3JlcG9ydC12aWV3ZXItZmVhdHVyZS50eXBlJztcblxuLy8gQSBCQ1AgNDcgbGFuZ3VhZ2UgdGFnIG5hbWluZyBob3cgbnVtYmVycyBhbmQgZGF0ZXMgYXJlIHdyaXR0ZW4sIGUuZy4gJ2ZyLUNBJy5cbi8vIFRoZSBzZXQgaXMgb3BlbiAodGhlIHNlcnZlcidzIHByb3ZpZGVyIGRlY2lkZXMgd2hpY2ggaXQgb2ZmZXJzKSwgc28gdGhpcyBpcyBhXG4vLyBuYW1lZCBhbGlhcyByYXRoZXIgdGhhbiBhIHVuaW9uLlxuZXhwb3J0IHR5cGUgUmVwb3J0TG9jYWxlVGFnID0gc3RyaW5nO1xuXG4vLyBBbiBJU08gNDIxNyBjdXJyZW5jeSBjb2RlLCBlLmcuICdDQUQnLiBPcGVuIGZvciB0aGUgc2FtZSByZWFzb24uXG5leHBvcnQgdHlwZSBSZXBvcnRDdXJyZW5jeUNvZGUgPSBzdHJpbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0IHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICAvLyBUaGUgcmVwb3J0J3Mgb3duIHN0b3JlZCBJQU5BIHpvbmUgKGUuZy4gQW1lcmljYS9OZXdfWW9yaykuIG51bGwgPSB0aGVcbiAgLy8gcmVwb3J0IGZvbGxvd3MgdGhlIGFwcGxpY2F0aW9uJ3MgZGVmYXVsdCByZXBvcnRpbmcgem9uZS5cbiAgdGltZXpvbmU6IHN0cmluZyB8IG51bGw7XG4gIC8vIFRoZSB6b25lIGV2ZXJ5IGRhdGUgZmlsdGVyLCB0aW1lIGJ1Y2tldCBhbmQgZGF0ZSBjZWxsIG9mIHRoaXMgcmVwb3J0IHVzZXMuXG4gIC8vIFJlc29sdmVkIHNlcnZlci1zaWRlOyB0aGUgc2FtZSBmb3IgZXZlcnkgdmlld2VyLCBleHBvcnQgYW5kIHRoZSBhc3Npc3RhbnQuXG4gIC8vIE9wdGlvbmFsIG9ubHkgYmVjYXVzZSBvbGRlciBzZXJ2ZXJzIG9taXQgaXQ7IHJlc29sdmVSZXBvcnRUaW1lem9uZSgpIHRoZW5cbiAgLy8gZmFsbHMgYmFjayB0byB0aGUgcmVwb3J0J3Mgb3duIGB0aW1lem9uZWAsIHRoZW4gdGhlIGJyb3dzZXIncyB6b25lLiBSZXNvbHZlXG4gIC8vIHRoZSB6b25lIGZvciByZW5kZXJpbmcgdGhyb3VnaCByZXNvbHZlUmVwb3J0VGltZXpvbmUoKSAoZm9ybWF0LnRzKTsgcmVhZCB0aGVcbiAgLy8gZmllbGQgZGlyZWN0bHkgb25seSB0byBjaGVjayB3aGV0aGVyIHRoZSBzZXJ2ZXIgc2VudCBpdC5cbiAgZWZmZWN0aXZlVGltZXpvbmU/OiBzdHJpbmc7XG4gIC8vIFRoZSByZXBvcnQncyBvd24gc3RvcmVkIGxvY2FsZS4gbnVsbCA9IHRoZSByZXBvcnQgZm9sbG93cyB0aGUgZGVmYXVsdC5cbiAgbG9jYWxlPzogUmVwb3J0TG9jYWxlVGFnIHwgbnVsbDtcbiAgLy8gVGhlIGxvY2FsZSBldmVyeSBudW1iZXIgYW5kIGRhdGUgb2YgdGhpcyByZXBvcnQgaXMgd3JpdHRlbiBpbiwgcmVzb2x2ZWRcbiAgLy8gc2VydmVyLXNpZGUgKHRoZSByZXBvcnQncyBvd24sIGVsc2UgdGhlIGFwcGxpY2F0aW9uJ3MgZGVmYXVsdCwgZWxzZVxuICAvLyBlbi1VUykuIEFic2VudCBvbiBvbGRlciBzZXJ2ZXJzLCB3aG9zZSByZXBvcnRzIHRoZW4gcmVhZCBlbi1VUy4gUmVzb2x2ZSBpdFxuICAvLyBmb3IgcmVuZGVyaW5nIHRocm91Z2ggcmVzb2x2ZUZvcm1hdENvbnRleHQoKSAoZm9ybWF0LnRzKSwgbmV2ZXIgZGlyZWN0bHkuXG4gIGVmZmVjdGl2ZUxvY2FsZT86IFJlcG9ydExvY2FsZVRhZztcbiAgLy8gVGhlIHJlcG9ydCdzIG93biBzdG9yZWQgY3VycmVuY3kuIG51bGwgPSB0aGUgcmVwb3J0IGZvbGxvd3MgdGhlIGRlZmF1bHQuXG4gIGN1cnJlbmN5PzogUmVwb3J0Q3VycmVuY3lDb2RlIHwgbnVsbDtcbiAgLy8gVGhlIGN1cnJlbmN5IG1vbmV5IGFtb3VudHMgYXJlIGxhYmVsZWQgaW4sIHJlc29sdmVkIGxpa2UgZWZmZWN0aXZlTG9jYWxlXG4gIC8vIChmYWxsaW5nIGJhY2sgdG8gdGhlIGxvY2FsZSdzIG93biBjdXJyZW5jeSwgdGhlbiBVU0QpLiBBIGxhYmVsIG9ubHk6XG4gIC8vIGFtb3VudHMgYXJlIG5ldmVyIGNvbnZlcnRlZC5cbiAgZWZmZWN0aXZlQ3VycmVuY3k/OiBSZXBvcnRDdXJyZW5jeUNvZGU7XG4gIC8vIEhvdyB0aGUgc2VydmVyIHNlbmRzIGEgcGVyY2VudCBtZWFzdXJlOiAncmF0aW8nID0gYSAwLTEgcmF0aW8gKDAuMzg1IHJlYWRzXG4gIC8vIDM4LjUlKS4gQWJzZW50IG9uIG9sZGVyIHNlcnZlcnMsIHdob3NlIHBlcmNlbnQgdmFsdWVzIGFyZSBhbHJlYWR5IHgxMDBcbiAgLy8gKDM4LjUgcmVhZHMgMzguNSUpLlxuICBwZXJjZW50Rm9ybWF0PzogJ3JhdGlvJztcbiAgLy8gUmVwb3J0LWxldmVsIGNvbmZpZzogdHlwb2dyYXBoaWMgc3R5bGVzLCBldGMuIChjYW1lbENhc2UgSlNPTiBjb2x1bW4pLlxuICBjb25maWc6IFJlcG9ydENvbmZpZztcbiAgLy8gVGhlIHBhZ2UgaW4gSU5DSEVTICh0aGUgcmVwb3J0J3MgbmF0aXZlIHVuaXQg4oCUIFBERnMgYW5kIFBvd2VyUG9pbnQgYXJlXG4gIC8vIGluY2gtYmFzZWQsIHNvIGV4cG9ydHMgYXJlIGRpbWVuc2lvbmFsbHkgZXhhY3QpLiBPcmllbnRhdGlvbiBpcyBub3QgYSBmaWVsZFxuICAvLyBvZiBpdHMgb3duOiBhIHBhZ2Ugd2lkZXIgdGhhbiBpdCBpcyB0YWxsIElTIGxhbmRzY2FwZS5cbiAgcGFnZVdpZHRoOiBudW1iZXI7XG4gIHBhZ2VIZWlnaHQ6IG51bWJlcjtcbiAgcGFnZXM6IFJlcG9ydFBhZ2VbXTtcbiAgLy8gVGhlIGhlYWRlciBhbmQgZm9vdGVyOiB0aGUgcmVwb3J0J3MgbWFzdGVyIHBhZ2UsIHdob3NlIGNvbXBvbmVudHMgZHJhd1xuICAvLyB1bmRlciBldmVyeSBwYWdlIHRoYXQgZG9lcyBub3QgaGlkZSB0aGVtIChQb3dlclBvaW50J3Mgc2xpZGUgbWFzdGVyKS4gTnVsbFxuICAvLyB1bnRpbCBhbnl0aGluZyBoYXMgYmVlbiBwbGFjZWQgaW4gdGhlbS5cbiAgbWFzdGVyOiBSZXBvcnRNYXN0ZXIgfCBudWxsO1xuICBmaWx0ZXJHcm91cHM6IFJlcG9ydEZpbHRlckdyb3VwW107XG4gIC8vIFRoZSB2aWV3ZXIgZmVhdHVyZXMgdGhpcyBzZXJ2ZXIgc2VydmVzIGZvciB0aGUgcmVwb3J0LiBUaGUgdmlld2VyIG9mZmVyc1xuICAvLyBhIGNvbnRyb2wgb25seSB3aGVuIGl0cyBmZWF0dXJlIGlzIGxpc3RlZC4gQWJzZW50IG9uIG9sZGVyIHNlcnZlcnMsIHdoaWNoXG4gIC8vIHNlcnZlIG5vbmUuXG4gIHZpZXdlckZlYXR1cmVzPzogUmVwb3J0Vmlld2VyRmVhdHVyZVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydE1hc3RlciB7XG4gIGlkOiBudW1iZXI7XG4gIGNvbXBvbmVudHM6IFJlcG9ydENvbXBvbmVudFtdO1xuICAvLyBUaGUgdmFsdWVzIHRoZSBoZWFkZXIgYW5kIGZvb3RlciB0ZXh0IHNob3dzLCBhcyBSZXBvcnRQYWdlLnZhbHVlcy5cbiAgdmFsdWVzPzogUmVwb3J0Q29tcG9uZW50W107XG59XG5cbi8vIEhvdyB0aGUgb3BlbiByZXBvcnQgd3JpdGVzIGl0cyBudW1iZXJzIGFuZCBkYXRlcywgcmVzb2x2ZWQgb25jZSBwZXIgcmVwb3J0XG4vLyAocmVzb2x2ZUZvcm1hdENvbnRleHQpIGFuZCByZWFkIGJ5IHRoZSB2aWV3ZXIsIHRoZSBQREYgYW5kIFBvd2VyUG9pbnQgYWxpa2UuXG4vLyBOZXZlciB0aGUgYnJvd3NlcidzIGxvY2FsZS5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Rm9ybWF0Q29udGV4dCB7XG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnO1xuICBjdXJyZW5jeTogUmVwb3J0Q3VycmVuY3lDb2RlO1xuICAvLyBXaGV0aGVyIGEgcGVyY2VudCBtZWFzdXJlIGFycml2ZXMgYXMgYSAwLTEgcmF0aW8gKHRoZSByZXBvcnQnc1xuICAvLyBwZXJjZW50Rm9ybWF0KS4gQW4gb2xkZXIgc2VydmVyIHNlbmRzIGl0IGFscmVhZHkgeDEwMC5cbiAgcmF0aW9QZXJjZW50OiBib29sZWFuO1xufVxuXG4vLyBPbmUgbG9jYWxlIHRoZSBzZXJ2ZXIgb2ZmZXJzLCB3aXRoIHRoZSBjdXJyZW5jeSBhIHJlcG9ydCBpbiBpdCB1c2VzIHdoZW4gaXRcbi8vIG5hbWVzIG5vbmUgb2YgaXRzIG93bi5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0TG9jYWxlT3B0aW9uIHtcbiAgbG9jYWxlOiBSZXBvcnRMb2NhbGVUYWc7XG4gIGRlZmF1bHRDdXJyZW5jeTogUmVwb3J0Q3VycmVuY3lDb2RlO1xufVxuXG4vLyBHRVQgcmVwb3J0cy9sb2NhbGVzOiB3aGF0IHRoZSByZXBvcnQgc2V0dGluZ3MnIExvY2FsZSBhbmQgQ3VycmVuY3kgc2VsZWN0c1xuLy8gb2ZmZXIuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydExvY2FsZXMge1xuICBkZWZhdWx0TG9jYWxlOiBSZXBvcnRMb2NhbGVUYWc7XG4gIG9wdGlvbnM6IFJlcG9ydExvY2FsZU9wdGlvbltdO1xuICBjdXJyZW5jaWVzOiBSZXBvcnRDdXJyZW5jeUNvZGVbXTtcbn1cblxuLy8gVGhlIGRlcHRoIG9mIHRoZSBoZWFkZXIgYmFuZCAodG9wIG9mIGV2ZXJ5IHBhZ2UpIGFuZCB0aGUgZm9vdGVyIGJhbmQgKGJvdHRvbVxuLy8gb2YgZXZlcnkgcGFnZSksIGluIElOQ0hFUy4gVGhlIGJhbmRzIGhvbGQgbm8gY29udGVudCBvZiB0aGVpciBvd24g4oCUIHRoZVxuLy8gbWFzdGVyJ3MgY29tcG9uZW50cyBzaXQgaW4gdGhlbSDigJQgdGhleSBhcmUgdGhlIHJlc2VydmVkIG1hcmdpbnMgdGhlIGVkaXRvclxuLy8gZHJhd3MgYXMgZ3VpZGVzIGFuZCBzbmFwcyB0by4gQWx3YXlzIGFycml2ZXMgcmVzb2x2ZWQgKDAgPSBubyBiYW5kKS5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0SGVhZGVyRm9vdGVyIHtcbiAgaGVhZGVySGVpZ2h0OiBudW1iZXI7XG4gIGZvb3RlckhlaWdodDogbnVtYmVyO1xufVxuXG4vLyBSZXBvcnQtbGV2ZWwgc3R5bGluZy4gU2l6ZXMgYXJlIGluIFBPSU5UUyAoMS83MlwiKSDigJQgdGhlIHJlcG9ydCdzIHR5cG9ncmFwaHlcbi8vIG1hcHMgMToxIHRvIFBERiAoNzJwdC9pbikgYW5kIFBvd2VyUG9pbnQgKHBvaW50IGZvbnQgc2l6ZXMpLCBzbyBhIHBvaW50XG4vLyB2YWx1ZSBpcyBkaW1lbnNpb25hbGx5IGV4YWN0IG9uIHNjcmVlbiBhbmQgaW4gZXZlcnkgZXhwb3J0LlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRDb25maWcge1xuICBzdHlsZXM/OiBSZXBvcnRTdHlsZXM7XG4gIC8vIFRoZSByZXBvcnQncyBncm91cC1ieSBjb250cm9sLiBPcHRpb25hbCBvbiB0aGUgdHlwZSBiZWNhdXNlIGEgUmVwb3J0Q29uZmlnXG4gIC8vIGxpdGVyYWwgbmVlZCBub3QgY2FycnkgaXQ7IHRoZSBBUEkgYWx3YXlzIHNlbmRzIGl0LCByZXNvbHZlZC5cbiAgZ3JvdXBCeT86IFJlcG9ydEdyb3VwQnk7XG4gIC8vIFJlc29sdmVkIGJ5IHRoZSBBUEkgbGlrZSBncm91cEJ5LlxuICBoZWFkZXJGb290ZXI/OiBSZXBvcnRIZWFkZXJGb290ZXI7XG59XG5cbi8vIFRoZSByZXBvcnQncyBncm91cC1ieSBjb250cm9sIOKAlCB0aGUgb25lIHN3aXRjaCB0aGF0IHJlLWJ1Y2tldHMgZXZlcnlcbi8vIHRpbWUtc2VyaWVzIGNoYXJ0IG9uIHRoZSByZXBvcnQgYmV0d2VlbiBkYXksIHdlZWssIG1vbnRoLCBxdWFydGVyIGFuZCB5ZWFyLlxuLy9cbi8vIEl0IGlzIE5PVCBhIGZpbHRlcjogYSBmaWx0ZXIgbmFycm93cyB3aGljaCByb3dzIGFyZSBjb3VudGVkLCB0aGlzIGNoYW5nZXMgaG93XG4vLyB0aGUgc3Vydml2aW5nIHJvd3MgYXJlIGJ1Y2tldGVkLiBJdCBzaGFyZXMgdGhlIHJlcG9ydCdzIGZpbHRlciBiYXIgYmVjYXVzZVxuLy8gdGhhdCBpcyB0aGUgb25lIHJvdyBvZiBjb250cm9scyBhIHZpZXdlciByZWFkcyBhIHJlcG9ydCB0aHJvdWdoIOKAlCB0aGVcbi8vIHNlcGFyYXRpb24gdGhhdCBtYXR0ZXJzIGlzIGluIHRoZSBtb2RlbCwgbm90IGluIHdoZXJlIHRoZSBjb250cm9sIGlzIHBhaW50ZWQuXG4vL1xuLy8gQWx3YXlzIGFycml2ZXMgUkVTT0xWRUQgKHRoZSBiYWNrZW5kIGZpbGxzIGFuIGFic2VudCBvciBwYXJ0aWFsIHN0b3JlZCBibG9ja1xuLy8gaW4gZnJvbSBpdHMgb3duIGRlZmF1bHRzKSwgc28gdGhlcmUgaXMgbm90aGluZyB0byBkZWZhdWx0IGhlcmUg4oCUIHJlbmRlciB3aGF0XG4vLyB5b3UgYXJlIGdpdmVuLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRHcm91cEJ5IHtcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgbGFiZWw6IHN0cmluZztcbiAgZ3JhbnVsYXJpdGllczogQ2hhcnRHcmFudWxhcml0eVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFN0eWxlcyB7XG4gIGhlYWRpbmc/OiB7IHNpemU/OiBudW1iZXIgfTtcbn1cblxuLy8gQ29udGVudCBwYWRkaW5nIGFyb3VuZCBhIGNvbXBvbmVudCdzIGJvZHksIGluIElOQ0hFUyAodGhlIGdlb21ldHJ5IHVuaXQpLlxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRQYWRkaW5nIHtcbiAgdG9wPzogbnVtYmVyO1xuICByaWdodD86IG51bWJlcjtcbiAgYm90dG9tPzogbnVtYmVyO1xuICBsZWZ0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFBhZ2Uge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmcgfCBudWxsO1xuICBvcmRlcjogbnVtYmVyO1xuICAvLyBUaGUgcGFnZSBvcHRzIG91dCBvZiB0aGUgcmVwb3J0J3MgaGVhZGVyIGFuZCBmb290ZXIgKGEgdGl0bGUgcGFnZSkuXG4gIG1hc3RlckhpZGRlbjogYm9vbGVhbjtcbiAgY29tcG9uZW50czogUmVwb3J0Q29tcG9uZW50W107XG4gIC8vIEV2ZXJ5IGFjdGl2ZSB2YWx1ZSBvZiB0aGUgcGFnZSwgaW4gaWQgb3JkZXI6IHRob3NlIGl0cyB0ZXh0IHNob3dzIGFuZFxuICAvLyB0aG9zZSBubyB0ZXh0IHNob3dzIGFueSBtb3JlIChrZXB0IHVudGlsIGEgdGV4dCwgdmFsdWUgb3IgcGFnZSBkZWxldGUsIHNvXG4gIC8vIGEgY2hpcCBwYXN0ZWQgYmFjayBzdGlsbCBuYW1lcyBvbmUpLiBOZXZlciBkcmF3biwgYW5kIG5ldmVyIGluXG4gIC8vIGBjb21wb25lbnRzYC4gT3B0aW9uYWwgYmVjYXVzZSBvbGRlciBzZXJ2ZXJzIG9taXQgaXQuXG4gIHZhbHVlcz86IFJlcG9ydENvbXBvbmVudFtdO1xufVxuXG4vLyAndGV4dCcgaXMgYXV0aG9yZWQgcmljaCB0ZXh0IHdpdGggbm8gcXVlcnkgYmVoaW5kIGl0IOKAlCBpdCBuZXZlciBmZXRjaGVzIGRhdGEuXG4vLyAndmFsdWUnIGlzIG9uZSBudW1iZXIgc2hvd24gaW5zaWRlIGEgdGV4dCBibG9jaydzIHdvcmRzICh7e3ZhbHVlLmtleX19KTsgaXRcbi8vIGhhcyBhIHF1ZXJ5IGJ1dCBubyBwbGFjZSBvZiBpdHMgb3duIG9uIHRoZSBwYWdlLiAnZ3JpZCcgaXMgYSB0YWJsZSBkcmF3biBieVxuLy8gZnMtZ3JpZCwgd2hpY2ggcmVhZHMgaXRzIG93biByb3dzIHRocm91Z2ggUmVwb3J0R3JpZFNvdXJjZS5cbmV4cG9ydCB0eXBlIFJlcG9ydENvbXBvbmVudFR5cGUgPSAnY2hhcnQnIHwgJ2xpc3QnIHwgJ2dyaWQnIHwgJ2twaScgfCAndGV4dCcgfCAndmFsdWUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydENvbXBvbmVudCB7XG4gIGlkOiBudW1iZXI7XG4gIHR5cGU6IFJlcG9ydENvbXBvbmVudFR5cGU7XG4gIHRpdGxlOiBzdHJpbmcgfCBudWxsO1xuICAvLyBHZW9tZXRyeSBpbiBJTkNIRVM6IGFic29sdXRlIHBvc2l0aW9uIG9uIHRoZSBwYWdlIGNhbnZhcy5cbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIHc6IG51bWJlcjtcbiAgaDogbnVtYmVyO1xuICAvLyBIZWlnaHQgbW9kZSwgREVSSVZFRCBmcm9tIHR5cGUgc2VydmVyLXNpZGUgKG5vdCBzdG9yZWQsIHJlYWQtb25seSk6IGxpc3RzXG4gIC8vIGFuZCBLUEkgdGlsZXMgYXJlIGF1dG8gKHRoZSBib3ggc2l6ZXMgdG8gaXRzIGNvbnRlbnQsIGBoYCBpZ25vcmVkKTsgY2hhcnRzXG4gIC8vIGFyZSBhbHdheXMgZml4ZWQgKHVzZSBgaGApIHNvIHRoZXkgZml0IHRoZSBib3ggYW5kIG5ldmVyIG92ZXJmbG93LlxuICBhdXRvSGVpZ2h0OiBib29sZWFuO1xuICAvLyBUaGUgc3RvcmVkIFNRTCBvZiBhIGxlZ2FjeSBzcWwtbW9kZSBjb21wb25lbnQuIE5VTEwgZm9yIGEgZGVyaXZlZCBvbmUsXG4gIC8vIHdob3NlIHN0YXRlbWVudCBkb2VzIG5vdCBleGlzdCB1bnRpbCBpdHMgZG9jdW1lbnQgaXMgY29tcGlsZWQg4oCUIHRoZSBTUUwgdGFiXG4gIC8vIGZldGNoZXMgdGhhdCBzZXBhcmF0ZWx5IChzZWUgUmVwb3J0Q29tcG9uZW50U3FsKS5cbiAgc3FsOiBzdHJpbmcgfCBudWxsO1xuICBjb25maWc6IENoYXJ0Q29uZmlnICYgTGlzdENvbmZpZyAmIEdyaWRDb25maWcgJiBLcGlDb25maWcgJiBUZXh0Q29uZmlnICYgVmFsdWVDb25maWcgJiBDb21wb25lbnRMYXlvdXRDb25maWdcbiAgICAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBmaWx0ZXJzOiBSZXBvcnRGaWx0ZXJbXTtcbn1cblxuLy8gV2hhdCB0aGUgU1FMIHRhYiBmZXRjaGVzOiB0aGUgc3RhdGVtZW50IGEgY29tcG9uZW50IHJ1bnMuXG4vL1xuLy8gRm9yIGEgZGVyaXZlZCBjb21wb25lbnQgYGJhc2VsaW5lYCBpcyB0cnVlIGFuZCBgc3FsYCBpcyB3aGF0IGl0cyBkb2N1bWVudFxuLy8gY29tcGlsZXMgdG8gd2l0aCBOTyB2aWV3ZXIgc3RhdGUg4oCUIG5vIGZpbHRlcnMsIHRoZSBhdXRob3JlZCBncmFpbi4gVGhlXG4vLyBudW1iZXJzIG9uIHNjcmVlbiBjb21lIGZyb20gdGhhdCBzdGF0ZW1lbnQgcGx1cyB3aGF0ZXZlciB0aGUgdmlld2VyIHBpY2tlZCxcbi8vIHNvIHRoZSB0d28gY2FuIGxlZ2l0aW1hdGVseSBkaWZmZXIgYW5kIHRoZSB0YWIgc2F5cyBzbyByYXRoZXIgdGhhbiBpbXBseWluZ1xuLy8gdGhleSBtYXRjaC5cbi8vXG4vLyBgdGltZXpvbmVgIGlzIHRoZSBJQU5BIHpvbmUgdGhlIHN0YXRlbWVudCB3YXMgY29tcGlsZWQgaW46IHRoZSByZXBvcnQnc1xuLy8gZWZmZWN0aXZlIHpvbmUuIE9wdGlvbmFsIGJlY2F1c2Ugb2xkZXIgc2VydmVycyBvbWl0IGl0OyB0aGV5IGNvbXBpbGVkIGluIFVUQy5cbi8vXG4vLyBgZXJyb3JgIGlzIG5vdCBhIGZhaWx1cmUgb2YgdGhlIHJlcXVlc3Q6IGEgZG9jdW1lbnQgdGhhdCBubyBsb25nZXIgY29tcGlsZXNcbi8vIGlzIHByZWNpc2VseSB3aGF0IHNvbWVvbmUgb3BlbnMgdGhpcyB0YWIgdG8gZGlzY292ZXIsIHNvIGl0IGFycml2ZXMgYXMgYVxuLy8gbWVzc2FnZSB0byByZW5kZXIgd2l0aCBgZXJyb3JUeXBlYCBuYW1pbmcgd2hpY2gga2luZCAoJ3N0YWxlLXF1ZXJ5JyBvclxuLy8gJ3NlbnNpdGl2ZS1jb2x1bW4nKSwgYW5kIGBzcWxgIG51bGwuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydENvbXBvbmVudFNxbCB7XG4gIHNxbDogc3RyaW5nIHwgbnVsbDtcbiAgb3JpZ2luOiAnc3FsJyB8ICdkYnEnIHwgJ2Rlcml2ZWQnO1xuICBiYXNlbGluZTogYm9vbGVhbjtcbiAgdGltZXpvbmU/OiBzdHJpbmc7XG4gIGVycm9yOiBzdHJpbmcgfCBudWxsO1xuICBlcnJvclR5cGU6IHN0cmluZyB8IG51bGw7XG59XG5cbi8vIEEgdGV4dCBibG9jaydzIGNvbnRlbnQ6IGFuIGh0bWwgZnJhZ21lbnQgdGhlIHNlcnZlciBoYXMgYWxyZWFkeSByZWJ1aWx0IGZyb21cbi8vIGFuIGFsbG93bGlzdCwgd2hpY2ggbWF5IGNhcnJ5IHt7cGFnZS5udW1iZXJ9fSwge3twYWdlLm5hbWV9fSBhbmRcbi8vIHt7cmVwb3J0Lm5hbWV9fSB0b2tlbnMgKHNlZSB0ZXh0LnRzKS5cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dENvbmZpZyB7XG4gIGh0bWw/OiBzdHJpbmc7XG59XG5cbi8vIEEgdmFsdWUncyBrZXk6IHdoYXQgaXRzIHRva2VuIGluIGEgdGV4dCBibG9jaydzIGh0bWwgbmFtZXMsIHVuaXF1ZSB3aXRoaW5cbi8vIHRoZSBwYWdlLiBJdHMgbnVtYmVyIGlzIGZvcm1hdHRlZCBieSBjb25maWcubWVhc3VyZSAoS3BpQ29uZmlnKSwgYXMgb24gYSBLUEkuXG4vLyBBIGZvcm11bGEgdmFsdWUgaGFzIG5vIHF1ZXJ5OiBgZm9ybXVsYWAgbmFtZXMgd2hhdCBpdCB3b3JrcyBvdXQgb2YgdGhlXG4vLyBwYWdlJ3MgcXVlcnkgdmFsdWVzLCBhbmQgaXRzIG1lYXN1cmUgaG9sZHMgb25seSB0aGUgZm9ybWF0IGtleXMgaXRzIGF1dGhvclxuLy8gZ2F2ZSAoZm9ybWF0LCBwcmVjaXNpb24sIHVuaXRzKS5cbmV4cG9ydCBpbnRlcmZhY2UgVmFsdWVDb25maWcge1xuICBrZXk/OiBzdHJpbmc7XG4gIGZvcm11bGE/OiBWYWx1ZUZvcm11bGFDb25maWcgfCBudWxsO1xufVxuXG4vLyBBIGZvcm11bGEgdmFsdWUncyBvcGVyYXRpb24gYW5kIG9wZXJhbmRzOiBgb2ZgIG5hbWVzIHF1ZXJ5IHZhbHVlcyBvbiB0aGVcbi8vIHNhbWUgcGFnZSAodGhlIG1hc3RlciBmb3IgYSBoZWFkZXIgb3IgZm9vdGVyKSBieSBrZXksIDIgb2YgdGhlbSwgb3IgMiB0byAxMFxuLy8gZm9yIGEgc3VtLiBgc2lnbmVkYCBhYnNlbnQgcmVhZHMgdHJ1ZSBmb3IgYSBjaGFuZ2UgYW5kIGEgcGVyY2VudCBjaGFuZ2UsXG4vLyBmYWxzZSBmb3IgYSByYXRpbyBhbmQgYSBzdW0uXG5leHBvcnQgaW50ZXJmYWNlIFZhbHVlRm9ybXVsYUNvbmZpZyB7XG4gIG9wOiBSZXBvcnRWYWx1ZUZvcm11bGE7XG4gIG9mOiBzdHJpbmdbXTtcbiAgc2lnbmVkPzogYm9vbGVhbiB8IG51bGw7XG59XG5cbi8vIE9uZSByb3cgb2YgUE9TVCBwYWdlcy86aWQvdmFsdWVzOiBhIHZhbHVlJ3MgbnVtYmVyIGZvciB0aGUgZmlsdGVycyBzZW50LlxuLy8gVGhlcmUgaXMgb25lIHJvdyBwZXIgdmFsdWUgdGhlIGxheWVyIHJlYWRzLCBpbiBpZCBvcmRlcjogb25lIHNvbWUgdGV4dCBvblxuLy8gdGhhdCBwYWdlIHNob3dzLCBvciBhbiBvcGVyYW5kIG9mIGEgZm9ybXVsYSBzb21lIHRleHQgc2hvd3MuIGB2YWx1ZWAgaXNcbi8vIHJhdywgYXMgdGhlIHF1ZXJ5IHJldHVybmVkIGl0IG9yIHRoZSBzZXJ2ZXIgd29ya2VkIGl0IG91dCAobnVsbCB3aGVuIHRoZXJlXG4vLyBpcyBubyByb3cgb3IgdGhlIHJlc3VsdCBpcyBudWxsKTsgZm9ybWF0dGluZyBpcyB0aGUgdmlld2VyJ3MsIHRocm91Z2ggdGhlXG4vLyB2YWx1ZSdzIG1lYXN1cmUuIGBlcnJvcmAgaXMgdGhhdCB2YWx1ZSdzIG93biBmYWlsdXJlLCBhbmQgdGhlIHBhZ2UncyBvdGhlclxuLy8gdmFsdWVzIGFyZSByZWFkIHJlZ2FyZGxlc3MuXG4vLyBgcm9sZWAgaXMgdGhlIGNvbXBhcmlzb24gcm9sZSB0aGUgbnVtYmVyIHBsYXlzOiBhIHF1ZXJ5IHZhbHVlJ3MgY29tcGFyaXNvblxuLy8gb3V0cHV0J3MsIGNoYW5nZSBvciBwZXJjZW50X2NoYW5nZSBmb3IgdGhvc2UgZm9ybXVsYXMsIGVsc2UgbnVsbC5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0UGFnZVZhbHVlIHtcbiAgaWQ6IG51bWJlcjtcbiAga2V5OiBzdHJpbmc7XG4gIHZhbHVlOiBudW1iZXIgfCBzdHJpbmcgfCBudWxsO1xuICBlcnJvcjogc3RyaW5nIHwgbnVsbDtcbiAgcm9sZT86IE91dHB1dFJvbGUgfCBudWxsO1xufVxuXG4vLyBDcm9zcy10eXBlIGxheW91dC9zdHlsZSBrZXlzIGNhcnJpZWQgaW4gYSBjb21wb25lbnQncyBjb25maWcgKGFsb25nc2lkZSB0aGVcbi8vIHR5cGUtc3BlY2lmaWMgY2hhcnQvbGlzdC9rcGkga2V5cykuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudExheW91dENvbmZpZyB7XG4gIHBhZGRpbmc/OiBDb21wb25lbnRQYWRkaW5nO1xufVxuXG4vLyBUaGUgcHJlc2VudGF0aW9uIHNldHRpbmdzIGEgY29tcG9uZW50J3Mgc2V0dGluZ3MgZGlhbG9nIGVkaXRzLiBUaXRsZSBhbmRcbi8vIHBhZGRpbmcgYXJlIG5vdCBwYXJ0IG9mIHdoYXQgdGhlIGNvbXBvbmVudCBxdWVyaWVzLCBzbyBhIGNoYW5nZSB0byB0aGVtXG4vLyByZXBhaW50cyB3aXRob3V0IHJlLXJ1bm5pbmcgYW55dGhpbmcuIEEgZGVyaXZlZCBLUEkncyBjYXJkIGtleXMgYXJlIHNlbnRcbi8vIHRvbzogdGhlIHNlcnZlciBjb21wdXRlcyB0aGUgdGFyZ2V0J3MgcHJvZ3Jlc3MgYW5kIHRoZSBzcGFya2xpbmUncyBwb2ludHNcbi8vIHdpdGggdGhlIGRhdGEsIHNvIGEgY2hhbmdlIHRvIHRoZW0gcmVsb2FkcyBpdC5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50U2V0dGluZ3Mge1xuICB0aXRsZTogc3RyaW5nO1xuICBwYWRkaW5nOiBDb21wb25lbnRQYWRkaW5nO1xuICBrcGk/OiBLcGlDYXJkU2V0dGluZ3M7XG59XG5cbi8vIEEgS1BJJ3MgY2FyZCBrZXlzLiBUaGUgZGlhbG9nIHNlbmRzIHRoZW0gKG51bGwgcmVtb3ZlcyBhIGtleSwgaW5jcmVhc2VJc1xuLy8gbnVsbCByZWFkcyBnb29kKSwgYW5kIENvbXBvbmVudFNldHRpbmdzLmtwaSBjYXJyaWVzIHRoZW0gYXMgdGhlIHNlcnZlclxuLy8gc2F2ZWQgdGhlbSwgcmVhZCBiYWNrIGZyb20gdGhlIGNvbmZpZyBpdCByZXR1cm5zLlxuZXhwb3J0IGludGVyZmFjZSBLcGlDYXJkU2V0dGluZ3Mge1xuICBpbmNyZWFzZUlzOiBSZXBvcnRDaGFuZ2VQb2xhcml0eSB8IG51bGw7XG4gIHRhcmdldDogS3BpVGFyZ2V0Q29uZmlnIHwgbnVsbDtcbiAgc3BhcmtsaW5lOiBLcGlTcGFya2xpbmVDb25maWcgfCBudWxsO1xufVxuXG4vLyBXaGVyZSBhIGNoYXJ0J3MgbGVnZW5kIHNpdHMgcmVsYXRpdmUgdG8gdGhlIHBsb3QsIG9yICdoaWRkZW4nIHRvIGRyb3AgaXQuXG5leHBvcnQgdHlwZSBMZWdlbmRQb3NpdGlvbiA9ICd0b3AnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCAncmlnaHQnIHwgJ2hpZGRlbic7XG5cbmV4cG9ydCB0eXBlIENoYXJ0R3JhbnVsYXJpdHkgPSAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCcgfCAncXVhcnRlcicgfCAneWVhcic7XG5cbi8vIEhvdyBlYWNoIGdyYW51bGFyaXR5IHJlYWRzIGluIHRoZSBncm91cC1ieSBjb250cm9sIGFuZCBvbiBhbiBleHBvcnQgY292ZXJcbi8vIHNoZWV0LiBXSElDSCBvZiB0aGVtIGEgZ2l2ZW4gcmVwb3J0IG9mZmVycyBjb21lcyBmcm9tIGl0cyBSZXBvcnRHcm91cEJ5O1xuLy8gdGhpcyBpcyBvbmx5IHRoZSBuYW1pbmcuICd5ZWFyJyByZWFkcyBhcyBcIkFubnVhbGx5XCIuXG5leHBvcnQgY29uc3QgR1JBTlVMQVJJVFlfT1BUSU9OUzogeyB2YWx1ZTogQ2hhcnRHcmFudWxhcml0eTsgbmFtZTogc3RyaW5nIH1bXSA9IFtcbiAgeyB2YWx1ZTogJ2RheScsIG5hbWU6ICdEYXknIH0sXG4gIHsgdmFsdWU6ICd3ZWVrJywgbmFtZTogJ1dlZWsnIH0sXG4gIHsgdmFsdWU6ICdtb250aCcsIG5hbWU6ICdNb250aCcgfSxcbiAgeyB2YWx1ZTogJ3F1YXJ0ZXInLCBuYW1lOiAnUXVhcnRlcicgfSxcbiAgeyB2YWx1ZTogJ3llYXInLCBuYW1lOiAnQW5udWFsbHknIH0sXG5dO1xuXG4vLyBUaGUgY2hhcnQgdHlwZXMgdGhhdCBwbG90IHNlcmllcyBhZ2FpbnN0IGEgY2F0ZWdvcnkgYW5kIGEgdmFsdWUgYXhpcywgYW5kIHNvXG4vLyB0aGUgdHlwZXMgYSBtZWFzdXJlJ3Mgb3duIHNlcmllcyBjYW4gYmUgZHJhd24gYXMuIEEgd2F0ZXJmYWxsIGhhcyB0aGUgc2FtZVxuLy8gYXhlcyBidXQgaXMgbm90IG9uZSBvZiB0aGVtOiBpdCBkcmF3cyBpdHMgb25lIG1lYXN1cmUgYXMgZmxvYXRpbmcgc3RlcHMuXG5leHBvcnQgdHlwZSBBeGlzQ2hhcnRUeXBlID0gJ2JhcicgfCAnbGluZScgfCAnYXJlYSc7XG5cbi8vIFdoYXQgb25lIGJhciBvZiBhIHdhdGVyZmFsbCBkb2VzIHRvIHRoZSBydW5uaW5nIHRvdGFsIOKAlCBlYWNoIGlzIGRyYXduIGluIGl0c1xuLy8gb3duIGNvbG9yLiBUaGUgY2xvc2luZyB0b3RhbCBpcyB0aGUgbGFzdCBiYXIsIHN0YW5kaW5nIG9uIHplcm8uXG5leHBvcnQgdHlwZSBXYXRlcmZhbGxTdGVwS2luZCA9ICdyaXNlJyB8ICdmYWxsJyB8ICd0b3RhbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcnRDb25maWcge1xuICAvLyBBIHdhdGVyZmFsbCB0YWtlcyBPTkUgbWVhc3VyZSB3aG9zZSB2YWx1ZSBwZXIgY2F0ZWdvcnkgaXMgaG93IGZhciB0aGVcbiAgLy8gcnVubmluZyB0b3RhbCBtb3ZlcyB0aGVyZTogZWFjaCBiYXIgc3RhcnRzIHdoZXJlIHRoZSBvbmUgYmVmb3JlIGl0IGVuZGVkLFxuICAvLyBhbmQgYSBjbG9zaW5nIFRvdGFsIGJhciBzaG93cyB0aGUgc3VtLlxuICBjaGFydFR5cGU/OiBBeGlzQ2hhcnRUeXBlIHwgJ3dhdGVyZmFsbCcgfCAncGllJyB8ICdkb251dCc7XG4gIC8vIEZvciBraW5kICd0aW1lJywgdGhlIHNlcnZlciBidWNrZXRzIHRoZSByYXcgZGF0ZXRpbWUgY29sdW1uIHRvIGBncmFudWxhcml0eWBcbiAgLy8gaW4gdGhlIHJlcG9ydCdzIHRpbWV6b25lICh0aGUgU1FMIGV4cG9zZXMgdGhlIHJhdyBjb2x1bW4sIHVuYnVja2V0ZWQpLlxuICAvLyBkYXRlTGFiZWwgd3JpdGVzIGEgdGltZSBheGlzJ3MgcGVyaW9kIGxhYmVscyBzaG9ydCAoJ01heScsIHRoZSBkZWZhdWx0KSxcbiAgLy8gbG9uZyAoJ01heSAyMDI2Jykgb3IgbnVtZXJpYyAoJzIwMjYtMDUnKTsgYSBjYXRlZ29yeSBheGlzIGlnbm9yZXMgaXQuXG4gIHhBeGlzPzoge1xuICAgIGNvbHVtbjogc3RyaW5nO1xuICAgIGtpbmQ/OiAnY2F0ZWdvcnknIHwgJ3RpbWUnO1xuICAgIGdyYW51bGFyaXR5PzogQ2hhcnRHcmFudWxhcml0eTtcbiAgICBsYWJlbD86IHN0cmluZztcbiAgICBkYXRlTGFiZWw/OiBSZXBvcnRDaGFydERhdGVMYWJlbDtcbiAgfTtcbiAgbWVhc3VyZXM/OiBDaGFydE1lYXN1cmVbXTtcbiAgLy8gRWFjaCB2YWx1ZSBvZiB0aGlzIGNvbHVtbiBiZWNvbWVzIGl0cyBvd24gc2VyaWVzLiBJdCBjYXJyaWVzIG5vIGxhYmVsOiB0aGVcbiAgLy8gbGVnZW5kIG5hbWVzIHRoZSB2YWx1ZXMgdGhlbXNlbHZlcy5cbiAgc3BsaXRCeT86IHsgY29sdW1uOiBzdHJpbmcgfTtcbiAgLy8gU2luZ2xlLWRpbWVuc2lvbiBiYXIgY2hhcnRzIG9ubHk6IGNvbG9yIGVhY2ggYmFyIGJ5IGl0cyBvd24gY2F0ZWdvcnkgYW5kXG4gIC8vIHNob3cgYSBsZWdlbmQsIFdJVEhPVVQgc3BsaXR0aW5nIGludG8gbXVsdGlwbGUgc2VyaWVzICh3aGljaCBzbGl2ZXJzIHRoZVxuICAvLyBiYXJzKS4gdjEgZXhwZWN0cyBjb2xvckJ5LmNvbHVtbiA9PT0geEF4aXMuY29sdW1uLiBJZ25vcmVkIHdoZW4gc3BsaXRCeSBpc1xuICAvLyBzZXQgb3IgdGhlIGNoYXJ0IGlzbid0IGEgYmFyIGNoYXJ0LlxuICBjb2xvckJ5PzogeyBjb2x1bW46IHN0cmluZzsgbGFiZWw/OiBzdHJpbmcgfTtcbiAgb3JpZW50YXRpb24/OiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnO1xuICBzdGFja2VkPzogYm9vbGVhbjtcbiAgLy8gU3RhY2tzIHRoZSBwcmltYXJ5IGF4aXMncyBiYXIgYW5kIGFyZWEgc2VyaWVzIGFzIHNoYXJlcyBvZiBlYWNoXG4gIC8vIGNhdGVnb3J5J3MgdG90YWwsIHNvIGV2ZXJ5IHN0YWNrIHJlYWNoZXMgMTAwJS4gVGhlIHZpZXdlciBjb21wdXRlcyB0aGVcbiAgLy8gc2hhcmVzIGZyb20gdGhlIHJvd3MgaXQgcmVjZWl2ZXMsIGFmdGVyIHRoZSBmaWx0ZXJzIHJhbjsgdGhlIHJvd3MgYW5kIHRoZVxuICAvLyBDU1Yga2VlcCB0aGUgcmF3IHZhbHVlcy4gVGhlIHZhbHVlIGF4aXMgdGhlbiBhbHdheXMgcnVucyAwIHRvIDEwMCUgKGZyb21cbiAgLy8gLTEwMCUgd2hlbiBhIHNoYXJlIGlzIG5lZ2F0aXZlKS5cbiAgcGVyY2VudFN0YWNrZWQ/OiBib29sZWFuO1xuICAvLyBWYWx1ZXMgcHJpbnRlZCBiZXNpZGUgdGhlIHBvaW50cyBvZiBhIGJhciwgbGluZSBvciBhcmVhIHNlcmllczogZXZlcnlcbiAgLy8gcG9pbnQgKGFsbCksIGVhY2ggc2VyaWVzJyBsYXRlc3QgcG9pbnQgKGxhc3QpLCBvciBldmVyeSBwb2ludCB3aG9zZSBsYWJlbFxuICAvLyBmaXRzIHdpdGhvdXQgb3ZlcmxhcHBpbmcgYW5vdGhlciAoYXV0bykuIE9taXR0ZWQgb3Igbm9uZSwgbm8gbGFiZWxzLiBBXG4gIC8vIHBpZSwgYSBkb251dCBhbmQgYSB3YXRlcmZhbGwgbmV2ZXIgcHJpbnQgdGhlbS5cbiAgZGF0YUxhYmVscz86IFJlcG9ydENoYXJ0RGF0YUxhYmVscztcbiAgLy8gVGhlIHByaW1hcnkgdmFsdWUgYXhpcydzIHRpdGxlIGFuZCByYW5nZS4gRXZlcnkgc2VyaWVzIGlzIHBsb3R0ZWQgYWdhaW5zdFxuICAvLyBpdCB1bmxlc3MgaXRzIG1lYXN1cmUgaXMgc2Vjb25kYXJ5LlxuICB2YWx1ZUF4aXM/OiBDaGFydFZhbHVlQXhpcztcbiAgLy8gVGhlIHNlY29uZCB2YWx1ZSBheGlzLCBvbiB0aGUgcmlnaHQsIHRoYXQgc2Vjb25kYXJ5IG1lYXN1cmVzIHBsb3QgYWdhaW5zdC5cbiAgc2Vjb25kYXJ5QXhpcz86IENoYXJ0VmFsdWVBeGlzO1xuICAvLyBMYWJlbGVkIGxpbmVzIGFjcm9zcyB0aGUgcGxvdCBhdCBhIGNvbnN0YW50IHZhbHVlLCBvciBiYW5kcyBiZXR3ZWVuIHR3b1xuICAvLyB2YWx1ZXMsIGF0IG1vc3QgNS4gVmVydGljYWwgYXhpcyBjaGFydHMgYW5kIHdhdGVyZmFsbHMgb25seS5cbiAgcmVmZXJlbmNlcz86IENoYXJ0UmVmZXJlbmNlW107XG4gIGxlZ2VuZD86IExlZ2VuZFBvc2l0aW9uO1xuICBzb3J0PzogUmVwb3J0U29ydDtcbiAgbGltaXQ/OiBudW1iZXI7XG59XG5cbi8vIEEgdmFsdWUgYXhpcydzIHRpdGxlIGFuZCByYW5nZS4gRWFjaCBib3VuZCBsZWZ0IG91dCBpcyBwaWNrZWQgZnJvbSB0aGUgZGF0YSxcbi8vIGFuZCB0aGUgdGljayBzdGVwIHdpdGhvdXQgYW4gaW50ZXJ2YWwuIEl0cyB0aWNrcyB0YWtlIHRoZSBudW1iZXIgZm9ybWF0IG9mXG4vLyB0aGUgbWVhc3VyZXMgcGxvdHRlZCBhZ2FpbnN0IGl0LlxuZXhwb3J0IGludGVyZmFjZSBDaGFydFZhbHVlQXhpcyB7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBtaW4/OiBudW1iZXI7XG4gIG1heD86IG51bWJlcjtcbiAgaW50ZXJ2YWw/OiBudW1iZXI7XG59XG5cbi8vIEEgcmVmZXJlbmNlIGRyYXduIGFjcm9zcyBhIGNoYXJ0J3MgcGxvdDogYSBsaW5lIGF0IGB2YWx1ZWAsIG9yIHdpdGggYHRvYCBhXG4vLyBiYW5kIGJldHdlZW4gdGhlIHR3bywgbGFiZWxlZCB3aXRoIGBsYWJlbGAuIFRoZSB2YWx1ZSBpcyBvbmUgdGhlIHVzZXIgb3Jcbi8vIHRoZSBtb2RlbCBzdGF0ZXMsIG5ldmVyIG9uZSByZWFkIG9mZiB0aGUgZGF0YS4gc2Vjb25kYXJ5IHBsb3RzIGl0IGFnYWluc3Rcbi8vIHRoZSBzZWNvbmQgdmFsdWUgYXhpcywgd2hlbiB0aGUgY2hhcnQgaGFzIG9uZS5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcnRSZWZlcmVuY2Uge1xuICB2YWx1ZTogbnVtYmVyO1xuICBsYWJlbDogc3RyaW5nO1xuICB0bz86IG51bWJlcjtcbiAgc2Vjb25kYXJ5PzogYm9vbGVhbjtcbn1cblxuLy8gSG93IG9uZSBudW1lcmljIHNsb3QgaXMgc2hvd246IGEgY2hhcnQgbWVhc3VyZSwgYSBLUEkgbWVhc3VyZSwgYSBsaXN0IGNvbHVtblxuLy8gb3IgYSBjcm9zcy10YWIncyBjZWxscy4gVGhlIGRhdGEgc3RheXMgcmF3IChpdCBzb3J0cyBhbmQgZXhwb3J0cyBhcyBhXG4vLyBudW1iZXIpOyBvbmx5IHRoZSByZW5kZXJlcnMgZm9ybWF0IGl0LCB0aGUgc2FtZSB3YXkgb24gc2NyZWVuLCBpbiB0aGUgUERGXG4vLyBhbmQgaW4gUG93ZXJQb2ludCAoZm9ybWF0LnRzKS4gQWxsIHRocmVlIGtleXMgYXJlIG9wdGlvbmFsLCBhbmQgcHJlY2lzaW9uIG9yXG4vLyB1bml0cyB3aXRob3V0IGEgZm9ybWF0IG1lYW4gbnVtYmVyLlxuLy9cbi8vIEZvcm1hdHRpbmcgaXMgb3B0LWluOiBhIGxpc3QgY29sdW1uIG9yIGNyb3NzLXRhYiBjZWxsIHdpdGhvdXQgdGhlc2Uga2V5c1xuLy8gcHJpbnRzIGl0cyB2YWx1ZSBhcyBpdCBjYW1lLCBhbmQgYSBjaGFydCB3aXRob3V0IHRoZW0ga2VlcHMgaXRzIHBsYWluXG4vLyBsb2NhbGUtZ3JvdXBlZCBheGlzIGFuZCB0b29sdGlwcy4gQSBLUEkgd2l0aG91dCB0aGVtIHByaW50cyBhIHBsYWluIG51bWJlci5cbmV4cG9ydCBpbnRlcmZhY2UgTnVtYmVyRm9ybWF0U3BlYyB7XG4gIC8vIHBlcmNlbnQgdGFrZXMgYSAwLTEgcmF0aW8gKDAuMyByZWFkcyAzMCUpIHdoZW4gdGhlIHJlcG9ydCdzIHBlcmNlbnRGb3JtYXRcbiAgLy8gaXMgJ3JhdGlvJzsgYW4gb2xkZXIgc2VydmVyIGxlYXZlcyBpdCBvdXQgYW5kIHNlbmRzIHgxMDAuIGN1cnJlbmN5IGxhYmVsc1xuICAvLyB0aGUgYW1vdW50IGluIHRoZSByZXBvcnQncyBjdXJyZW5jeSwgd3JpdHRlbiBpbiBpdHMgbG9jYWxlLlxuICBmb3JtYXQ/OiBSZXBvcnRWYWx1ZUZvcm1hdCB8IFJlcG9ydExpc3RDb2x1bW5Gb3JtYXQ7XG4gIC8vIEhvdyBtYW55IGRlY2ltYWwgcGxhY2VzIHRoZSB2YWx1ZSBpcyBzaG93biB0byAoMC02KS4gRml4ZWQgcmF0aGVyIHRoYW5cbiAgLy8gbWF4aW11bTogYSBjb2x1bW4gb2YgcmF0ZXMgaXMgdW5yZWFkYWJsZSB3aGVuIGVhY2ggb25lIHNob3dzIGEgZGlmZmVyZW50XG4gIC8vIG51bWJlciBvZiBkZWNpbWFscy4gRm9yIHBlcmNlbnQgaXQgY291bnRzIHRoZSBkZWNpbWFscyBvZiB0aGUgcGVyY2VudGFnZVxuICAvLyAocHJlY2lzaW9uIDEgc2hvd3MgMC4zIGFzIDMwLjAlKS4gT21pdHRlZCBsZWF2ZXMgdGhlIGZvcm1hdCdzIG93biBkZWZhdWx0OlxuICAvLyBhdCBtb3N0IG9uZSBkZWNpbWFsIGZvciBwZXJjZW50IChhbmQgZm9yIGFuIGFiYnJldmlhdGVkIDEuMkspLCB3aG9sZSB1bml0c1xuICAvLyBmb3IgY3VycmVuY3ksIHRoZSBsb2NhbGUncyBkZWZhdWx0IGZvciBhIG51bWJlci5cbiAgLy9cbiAgLy8gSXQgY2Fubm90IGJlIGFwcGxpZWQgaW4gdGhlIFNRTDogdGhlIHZhbHVlIGlzIGFnZ3JlZ2F0ZWQgYWZ0ZXIgdGhlIHJlcG9ydCdzXG4gIC8vIGZpbHRlcnMgcnVuLCBzbyBwcmUtcm91bmRpbmcgd291bGQgYnJlYWsgbGl2ZSByZS1maWx0ZXJpbmcuXG4gIHByZWNpc2lvbj86IG51bWJlcjtcbiAgLy8gQWJicmV2aWF0ZXMgdG8gdGhvdXNhbmRzICgxLjJLKSBvciBtaWxsaW9ucyAoMy40TSksIG9yIHBpY2tzIGJ5IHNpemUuXG4gIHVuaXRzPzogUmVwb3J0TnVtYmVyVW5pdHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcnRNZWFzdXJlIGV4dGVuZHMgTnVtYmVyRm9ybWF0U3BlYyB7XG4gIGNvbHVtbjogc3RyaW5nO1xuICBhZ2dyZWdhdGlvbj86ICdzdW0nIHwgJ2NvdW50JyB8ICdhdmcnIHwgJ21pbicgfCAnbWF4JztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIC8vIERyYXdzIHRoaXMgbWVhc3VyZSdzIHNlcmllcyBhcyBhIGRpZmZlcmVudCB0eXBlIGZyb20gdGhlIGNoYXJ0J3Mgb3duXG4gIC8vIGNoYXJ0VHlwZSDigJQgY291bnRzIGFzIGJhcnMgd2l0aCBhIHJhdGUgYXMgYSBsaW5lIG92ZXIgdGhlbSBpcyBhIGNvbWJvXG4gIC8vIGNoYXJ0LiBPbWl0dGVkLCB0aGUgc2VyaWVzIHRha2VzIHRoZSBjaGFydCdzIHR5cGUuIEF4aXMgY2hhcnRzIG9ubHkgKGEgcGllXG4gIC8vIGlnbm9yZXMgaXQpLlxuICB0eXBlPzogQXhpc0NoYXJ0VHlwZTtcbiAgLy8gQSBjaGFydCBtZWFzdXJlJ3MgZm9ybWF0IHNob3dzIG9uIGl0cyB0b29sdGlwcywgYW5kIG9uIHRoZSB2YWx1ZSBheGlzXG4gIC8vIHdoZW4gZXZlcnkgbWVhc3VyZSBzaGFyaW5nIHRoZSBheGlzIGFncmVlcyBvbiBpdC4gQSBLUEkncyBtZWFzdXJlIGZvcm1hdHNcbiAgLy8gaXRzIG9uZSB2YWx1ZS5cbiAgZm9ybWF0PzogUmVwb3J0VmFsdWVGb3JtYXQ7XG4gIC8vIFBsb3RzIHRoaXMgbWVhc3VyZSBhZ2FpbnN0IHRoZSBzZWNvbmQgdmFsdWUgYXhpcywgb24gdGhlIHJpZ2h0LCBmb3IgYVxuICAvLyBxdWFudGl0eSBvbiBhbm90aGVyIHNjYWxlLiBPbWl0dGVkIG9yIGZhbHNlLCBpdCBzaGFyZXMgdGhlIHByaW1hcnkgYXhpcy5cbiAgLy8gQSB2ZXJ0aWNhbCBheGlzIGNoYXJ0IG9ubHksIHdpdGggYXQgbGVhc3Qgb25lIG1lYXN1cmUgbGVmdCBvbiB0aGUgcHJpbWFyeVxuICAvLyBheGlzLlxuICBzZWNvbmRhcnk/OiBib29sZWFuO1xuICAvLyBUaGUgcGFsZXR0ZSBjb2xvciB0aGlzIG1lYXN1cmUncyBzZXJpZXMgaXMgZHJhd24gaW4uIE9taXR0ZWQsIHRoZSBzZXJpZXNcbiAgLy8gdGFrZXMgdGhlIHBhbGV0dGUgY29sb3Igb2YgaXRzIHBvc2l0aW9uLiBBIGNvbG9yIG9uIHRoZSBmaXJzdCBtZWFzdXJlXG4gIC8vIHR1cm5zIG9mZiBhIGNhdGVnb3J5IGJhciBjaGFydCdzIGRlZmF1bHQgY29sb3IgcGVyIGJhciAoaXNDb2xvckJ5KS5cbiAgY29sb3I/OiBSZXBvcnRDaGFydENvbG9yO1xuICAvLyBIb3cgYSBsaW5lIHNlcmllcycgbGluZSBpcyBkcmF3bi4gT21pdHRlZCwgc29saWQuXG4gIGxpbmU/OiBSZXBvcnRDaGFydExpbmVTdHlsZTtcbiAgLy8gV2hldGhlciBhIGxpbmUgb3IgYXJlYSBzZXJpZXMgZHJhd3MgYSBkb3Qgb24gZWFjaCBwb2ludC4gT21pdHRlZCwgdHJ1ZS5cbiAgbWFya2Vycz86IGJvb2xlYW47XG4gIC8vIEEgbGluZSBhY3Jvc3MgdGhlIHBsb3QgYXQgdGhpcyBzZXJpZXMnIGF2ZXJhZ2UsIG1lZGlhbiwgbG93ZXN0IG9yIGhpZ2hlc3RcbiAgLy8gdmFsdWUgb3ZlciB0aGUgcG9pbnRzIG9uIHNjcmVlbi4gVmVydGljYWwgYXhpcyBjaGFydHMgb25seS5cbiAgbWFya0xpbmU/OiBSZXBvcnRDaGFydE1hcmtTdGF0O1xufVxuXG4vLyBPbmUgYXV0aG9yZWQgY29sdW1uIG9mIGEgcGxhaW4gbGlzdC5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdENvbHVtbiBleHRlbmRzIE51bWJlckZvcm1hdFNwZWMge1xuICBjb2x1bW46IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIC8vIGRhdGUga2VlcHMgdGhlIGNvbHVtbiBhIFJBVyB0aW1lc3RhbXAsIHNvIHRoZSByZXBvcnQgdGltZXpvbmUgYW5kIGl0c1xuICAvLyBkYXRlUmFuZ2UgZmlsdGVycyBrZWVwIHdvcmtpbmcsIGFuZCB0aGUgdmlld2VyIHJlbmRlcnMgaXQgYXMgYSBkYXkgaW4gdGhlXG4gIC8vIHJlcG9ydCdzIHpvbmUgYW5kIGxvY2FsZS4gbnVtYmVyLCBwZXJjZW50IGFuZCBjdXJyZW5jeSBmb3JtYXQgdGhlIHZhbHVlIGFzXG4gIC8vIGEgS1BJIG1lYXN1cmUgZG9lcy4gV2l0aG91dCBhIGZvcm1hdCB0aGUgdmFsdWUgcHJpbnRzIGFzIGl0IGNhbWUuXG4gIGZvcm1hdD86IFJlcG9ydExpc3RDb2x1bW5Gb3JtYXQ7XG4gIC8vIEEgY29sdW1uIHRoZSBTUUwgYWxyZWFkeSBmb3JtYXR0ZWQgaXMgdGV4dCwgc28gaXQgbmFtZXMgYHNvcnRDb2x1bW5gOiB0aGVcbiAgLy8gcmF3IG51bWVyaWMgYWxpYXMgdGhlIHF1ZXJ5IGFsc28gb3V0cHV0cywgd2hpY2ggdGhlIHNlcnZlciBvcmRlcnMgYnlcbiAgLy8gaW5zdGVhZC5cbiAgc29ydENvbHVtbj86IHN0cmluZztcbiAgLy8gZmFsc2Uga2VlcHMgdGhlIGNlbGwgb24gb25lIGxpbmUuIE9taXR0ZWQsIGEgbG9uZyB2YWx1ZSB3cmFwcy5cbiAgd3JhcD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdENvbmZpZyB7XG4gIGNvbHVtbnM/OiBMaXN0Q29sdW1uW107XG4gIC8vIEEgY3Jvc3MtdGFiOiBgcm93QnlgIHN0YXlzIGRvd24gdGhlIHNpZGUgYW5kIGV2ZXJ5IHZhbHVlIG9mIGBwaXZvdEJ5YFxuICAvLyBiZWNvbWVzIGEgY29sdW1uLiBUaGUgdHdvIGFyZSBzZXQgdG9nZXRoZXIsIGBjb2x1bW5zYCBpcyBvbWl0dGVkICh0aGVcbiAgLy8gYmFja2VuZCByZWplY3RzIGF1dGhvcmluZyBib3RoKSwgYW5kIHRoZSBjb2x1bW4gc2V0IGFycml2ZXMgd2l0aCB0aGUgcm93c1xuICAvLyBpbiBDb21wb25lbnREYXRhLmNvbHVtbnMgYmVjYXVzZSBvbmx5IHRoZSByZXN1bHQga25vd3MgdGhlIHBpdm90IHZhbHVlcy5cbiAgLy8gcm93QnkubGFiZWwgaGVhZHMgdGhlIHNpZGUgY29sdW1uIG9uIHNjcmVlbiBhbmQgaW4gZXZlcnkgZXhwb3J0LCBhbmRcbiAgLy8gZGVmYXVsdHMgdG8gdGhlIGNvbHVtbiBuYW1lLiBwaXZvdEJ5IGNhcnJpZXMgbm8gbGFiZWw6IGl0cyB2YWx1ZXMgYXJlIHRoZVxuICAvLyBoZWFkaW5ncy5cbiAgcm93Qnk/OiB7IGNvbHVtbjogc3RyaW5nOyBsYWJlbD86IHN0cmluZyB9O1xuICBwaXZvdEJ5PzogeyBjb2x1bW46IHN0cmluZyB9O1xuICAvLyBUaGUgYXV0aG9yZWQgb3JkZXIsIG1vc3QgaW1wb3J0YW50IGZpcnN0LiBBIGxpc3Qgc2F2ZWQgYmVmb3JlIG11bHRpLWtleVxuICAvLyBzb3J0aW5nIHN0b3JlcyBvbmUgb2JqZWN0LCBzbyByZWFkIGl0IHRocm91Z2ggbGlzdFNvcnRUZXJtcygpIG9ubHkuXG4gIHNvcnQ/OiBSZXBvcnRTb3J0IHwgUmVwb3J0U29ydFtdO1xuICAvLyBIb3cgbWFueSBsZWFkaW5nIGNvbHVtbnMgc3RheSBpbiB2aWV3IHdoaWxlIHRoZSBsaXN0IHNjcm9sbHMgc2lkZXdheXNcbiAgLy8gKDAtMykuIFVuc2V0LCBhIGNyb3NzLXRhYiBwaW5zIGl0cyByb3cta2V5IGNvbHVtbiBhbmQgYSBwbGFpbiBsaXN0IG5vbmUuXG4gIHBpbm5lZENvbHVtbnM/OiBudW1iZXIgfCBudWxsO1xuICBwYWdlU2l6ZT86IG51bWJlcjtcbiAgLy8gdHJ1ZSBhZGRzIGEgdG90YWxzIHJvdyB1bmRlciB0aGUgbGlzdDogdGhlIHNlcnZlciBydW5zIHRoZSBtZWFzdXJlcyBhZ2FpblxuICAvLyBvdmVyIGV2ZXJ5IHJvdyB0aGUgZmlsdGVycyBrZWVwLCB3aXRob3V0IGdyb3VwaW5nLCBhbmQgYSBjcm9zcy10YWIgdG90YWxzXG4gIC8vIGVhY2ggY29sdW1uLlxuICB0b3RhbHM/OiBib29sZWFuO1xuICAvLyBBIGNyb3NzLXRhYiBvbmx5OiBob3cgZXZlcnkgY2VsbCBvZiB0aGUgZ3JpZCBpcyBmb3JtYXR0ZWQsIHdpdGggYSBLUElcbiAgLy8gbWVhc3VyZSdzIGtleXMuIFRoZSByb3cga2V5IGNvbHVtbiBzdGF5cyBhcyBpdCBjYW1lLlxuICBjZWxsRm9ybWF0PzogTnVtYmVyRm9ybWF0U3BlYyAmIHsgZm9ybWF0PzogUmVwb3J0VmFsdWVGb3JtYXQgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBLcGlDb25maWcge1xuICBtZWFzdXJlPzogQ2hhcnRNZWFzdXJlO1xuICAvLyBXaGV0aGVyIGEgcmlzZSBpbiB0aGUgdmFsdWUgaXMgZ29vZCBuZXdzLCBiYWQgbmV3cyBvciBuZWl0aGVyOiBpdCBwaWNrc1xuICAvLyB0aGUgZGVsdGEncyBjb2xvciBhbmQgZGVjaWRlcyB3aGVuIGEgdGFyZ2V0IGlzIG1ldCAoZ29vZDogYXQgb3IgYWJvdmUgaXQ7XG4gIC8vIGJhZDogYXQgb3IgYmVsb3cgaXQ7IG5ldXRyYWw6IG5ldmVyIGp1ZGdlZCkuIE9taXR0ZWQgb3IgbnVsbCByZWFkcyBnb29kLlxuICBpbmNyZWFzZUlzPzogUmVwb3J0Q2hhbmdlUG9sYXJpdHkgfCBudWxsO1xuICAvLyBBIG51bWJlciB0aGUgdXNlciBnYXZlIGZvciB0aGUgdmFsdWUgdG8gcmVhY2gsIG5ldmVyIG9uZSByZWFkIG9mZiB0aGVcbiAgLy8gZGF0YS4gVGhlIHNlcnZlciBzZW5kcyB0aGUgcHJvZ3Jlc3MgdG93YXJkIGl0IHdpdGggdGhlIGRhdGEuXG4gIHRhcmdldD86IEtwaVRhcmdldENvbmZpZyB8IG51bGw7XG4gIC8vIEEgc21hbGwgdHJlbmQgbGluZSBvZiB0aGUgdmFsdWUgb3ZlciBpdHMgbGFzdCBwZXJpb2RzLCBkcmF3biB1bmRlciBpdC5cbiAgc3BhcmtsaW5lPzogS3BpU3BhcmtsaW5lQ29uZmlnIHwgbnVsbDtcbn1cblxuLy8gQSBLUEkncyB0YXJnZXQ6IHRoZSB2YWx1ZSwgYW5kIGFuIG9wdGlvbmFsIGNhcHRpb24gZm9yIGl0ICgnR29hbCcpLlxuZXhwb3J0IGludGVyZmFjZSBLcGlUYXJnZXRDb25maWcge1xuICB2YWx1ZTogbnVtYmVyO1xuICBsYWJlbD86IHN0cmluZyB8IG51bGw7XG59XG5cbi8vIEEgS1BJJ3Mgc3BhcmtsaW5lOiBob3cgd2lkZSBlYWNoIHBvaW50J3MgcGVyaW9kIGlzIChudWxsIHJlYWRzIG1vbnRoKSBhbmRcbi8vIGhvdyBtYW55IHBlcmlvZHMgaXQgZHJhd3MsIDIgdG8gNjAgKG51bGwgcmVhZHMgMTIpLlxuZXhwb3J0IGludGVyZmFjZSBLcGlTcGFya2xpbmVDb25maWcge1xuICBncmFudWxhcml0eT86IENoYXJ0R3JhbnVsYXJpdHkgfCBudWxsO1xuICBwZXJpb2RzPzogbnVtYmVyIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRTb3J0IHtcbiAgY29sdW1uOiBzdHJpbmc7XG4gIGRpcmVjdGlvbj86ICdhc2MnIHwgJ2Rlc2MnO1xufVxuXG5leHBvcnQgdHlwZSBSZXBvcnRGaWx0ZXJUeXBlID0gJ2RhdGVSYW5nZScgfCAnc2VsZWN0JyB8ICdrZXl3b3JkJyB8ICdudW1iZXJSYW5nZSc7XG5cbi8vIFdoZXJlIGEgZmlsdGVyIGdyb3VwJ3MgY29udHJvbCBpcyBleHBvc2VkLiBBIGdyb3VwIGNhbiBiZSBzaG93biBvbiBpdHNcbi8vIGNvbXBvbmVudHMsIGluIHRoZSByZXBvcnQgYmFyLCBvciBCT1RIIGF0IG9uY2UgKHRoZSB0d28gYXJlIGluZGVwZW5kZW50XG4vLyB0b2dnbGVzIGluIHRoZSBVSSk7IGEgY29sdW1uIHdpdGggbmVpdGhlciBleHBvc2VkIHNpbXBseSBoYXMgbm8gZmlsdGVyLlxuLy8gJ3BhZ2UnIHNob3dzIGl0IGluIHRoZSByZXBvcnQgYmFyIG9mIG9uZSBwYWdlIG9ubHkgKFJlcG9ydEZpbHRlckdyb3VwLnBhZ2VJZCkuXG5leHBvcnQgdHlwZSBSZXBvcnRGaWx0ZXJMZXZlbCA9ICdjb21wb25lbnQnIHwgJ3JlcG9ydCcgfCAnYm90aCcgfCAncGFnZSc7XG5cbi8vIE9uZSBmaWx0ZXJhYmxlIG91dHB1dCBjb2x1bW4gb2YgYSBjb21wb25lbnQncyBTUUwsIHdpdGggdGhlIGZpbHRlciBpbnRlcmZhY2Vcbi8vIElORkVSUkVEIGZyb20gaXRzIGRhdGEgKHRoZSBodW1hbiBuZXZlciBwaWNrcyB0aGUgaW50ZXJmYWNlIOKAlCBpdCBmb2xsb3dzIHRoZVxuLy8gY29sdW1uJ3MgdHlwZSkuIERyaXZlcyB0aGUgRmlsdGVycyB0YWIgbGlzdGluZy5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0RmlsdGVyYWJsZUNvbHVtbiB7XG4gIGNvbHVtbjogc3RyaW5nO1xuICB0eXBlOiBSZXBvcnRGaWx0ZXJUeXBlO1xuICAvLyBFdmVyeSBpbnRlcmZhY2UgdGhlIGNvbHVtbiBjYW4gdGFrZSwgdGhlIGluZmVycmVkIG9uZSAodHlwZSkgZmlyc3Q6IGFcbiAgLy8gbnVtZXJpYyBjb2x1bW4gdGFrZXMgWydzZWxlY3QnLCAnbnVtYmVyUmFuZ2UnXS4gQWJzZW50IG9uIG9sZGVyIHNlcnZlcnMuXG4gIHR5cGVzPzogUmVwb3J0RmlsdGVyVHlwZVtdO1xufVxuXG4vLyBHcm91bmQgdHJ1dGg6IG9uZSBmaWx0ZXJhYmxlIG91dHB1dCBjb2x1bW4gT04gb25lIGNvbXBvbmVudCdzIFNRTC4gQWx3YXlzIGFcbi8vIG1lbWJlciBvZiBhIGZpbHRlciBncm91cCDigJQgdGhlIHVuaXQgdGhhdCBsaW5rcyBlcXVpdmFsZW50IGZpbHRlcnMgYWNyb3NzXG4vLyBjb21wb25lbnRzIGFuZCBkZWNpZGVzIHdoZXJlIHRoZSBjb250cm9sIHJlbmRlcnMgKGNvbXBvbmVudCB2cyByZXBvcnQgYmFyKS5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0RmlsdGVyIHtcbiAgaWQ6IG51bWJlcjtcbiAgY29tcG9uZW50SWQ6IG51bWJlcjtcbiAgZmlsdGVyR3JvdXBJZDogbnVtYmVyO1xuICBmaWx0ZXJDb2x1bW46IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZyB8IG51bGw7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIGhhc09wdGlvbnM6IGJvb2xlYW47XG4gIGNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8vIE9uZSBjaG9pY2UgaW4gYSBzZWxlY3QgZmlsdGVyJ3Mgb3B0aW9uIGxpc3QuIFRoZSB2YWx1ZSBpcyB3aGF0IHRoZSBmaWx0ZXJcbi8vIG1hdGNoZXMgb24gYW5kIGdldHMgc3RvcmVkIGluIGEgc2F2ZWQgZGVmYXVsdCDigJQgZm9yIGFuIGVudGl0eSB0aGF0IGlzIGl0c1xuLy8gc3RhYmxlIGlkLCBuZXZlciBpdHMgbmFtZSwgc28gcmVuYW1pbmcgdGhlIGVudGl0eSBtb3ZlcyB0aGUgbGFiZWwgd2l0aG91dFxuLy8gYnJlYWtpbmcgdGhlIGRlZmF1bHQuIFRoZSBsYWJlbCBpcyBvbmx5IGV2ZXIgd2hhdCB0aGUgdmlld2VyIHJlYWRzLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRGaWx0ZXJPcHRpb24ge1xuICB2YWx1ZTogdW5rbm93bjtcbiAgbGFiZWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRGaWx0ZXJHcm91cCB7XG4gIGlkOiBudW1iZXI7XG4gIC8vIFRoZSBncm91cCdzIGlkZW50aWZpZXIsIHVuaXF1ZSBpbiB0aGUgcmVwb3J0OiBjYW1lbENhc2UsIGEgbGV0dGVyIGZpcnN0LFxuICAvLyB0aGVuIGxldHRlcnMgYW5kIGRpZ2l0cy4gU2V0IGFwYXJ0IGZyb20gdGhlIGxhYmVsOiBhIG5ldyBsYWJlbCBuZXZlclxuICAvLyBjaGFuZ2VzIGl0LCBhbmQgaXQgaXMgZWRpdGVkIG9uIGl0cyBvd24gKFJlcG9ydCBzZXR0aW5ncyA+IEZpbHRlcnMpLlxuICAvLyBUaWxlcyBhbmQgc2F2ZWQgZmlsdGVycyBiaW5kIHRoZSBncm91cCBieSBpZCwgbmV2ZXIgYnkgbmFtZS4gT3B0aW9uYWxcbiAgLy8gYmVjYXVzZSBhbiBvbGRlciBzZXJ2ZXIgc2VuZHMgbm9uZS5cbiAgbmFtZT86IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZyB8IG51bGw7XG4gIHR5cGU6IFJlcG9ydEZpbHRlclR5cGU7XG4gIGxldmVsOiBSZXBvcnRGaWx0ZXJMZXZlbDtcbiAgb3JkZXI6IG51bWJlcjtcbiAgY29uZmlnOiB7IGRlZmF1bHQ/OiBGaWx0ZXJHcm91cERlZmF1bHQgfSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBmaWx0ZXJzOiBSZXBvcnRGaWx0ZXJbXTtcbiAgLy8gVGhlIHBhZ2Ugd2hvc2UgcmVwb3J0IGJhciBzaG93cyB0aGUgZ3JvdXA6IHNldCBvbmx5IHdoZW4gbGV2ZWwgaXMgJ3BhZ2UnLFxuICAvLyBudWxsIG90aGVyd2lzZS4gQWJzZW50IG9uIG9sZGVyIHNlcnZlcnMuXG4gIHBhZ2VJZD86IG51bWJlciB8IG51bGw7XG4gIC8vIFRoZSBjb21wb25lbnRzIG9mIHRoZSBncm91cCdzIGFjdGl2ZSwgZW5hYmxlZCBtZW1iZXJzIHRoYXQgYXJlIHRpbGVzXG4gIC8vIChjaGFydCwgbGlzdCwgS1BJKS4gQWJzZW50IG9uIG9sZGVyIHNlcnZlcnMuXG4gIGNvbXBvbmVudElkcz86IG51bWJlcltdO1xuICAvLyBUcnVlIHdoZW4gYW4gZW5hYmxlZCBtZW1iZXIgYmluZHMgc2V2ZXJhbCBjb2x1bW5zLCB3aGVyZSB2YWx1ZXMgY2Fubm90XG4gIC8vIGJlIGxlZnQgb3V0OiB0aGUgZ3JvdXAgb2ZmZXJzIG5vICdFeGNsdWRlIHRoZXNlJyAob2ZmZXJzRXhjbHVkZSkuIEFic2VudFxuICAvLyBvbiBvbGRlciBzZXJ2ZXJzLlxuICBtdWx0aUNvbHVtbj86IGJvb2xlYW47XG4gIC8vIEEgc2VsZWN0IGdyb3VwJ3MgbGFiZWwgZm9yIGEgYmxhbmsgcm93LCBudWxsIHdoZW4gYmxhbmsgcm93cyBoYXZlIG5vbmU6XG4gIC8vIGFuIGV4Y2x1ZGUgbGluZSBzYXlzIHdoZXRoZXIgdGhlIGJsYW5rIHJvd3MgYXJlIGtlcHQuIFNlbnQgZm9yIHNlbGVjdFxuICAvLyBncm91cHMgb25seSwgYW5kIGFic2VudCBvbiBvbGRlciBzZXJ2ZXJzLlxuICBibGFua0xhYmVsPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuLy8gQSBmaWx0ZXIgZ3JvdXAncyB2YWx1ZSBpbiBpdHMgc3RvcmVkIHNoYXBlOiBpdHMgYXV0aG9yZWQgZGVmYXVsdCAodGhlIHZhbHVlXG4vLyB0aGF0IHNlZWRzIHRoZSByZXBvcnQgYmFyIG9uIGV2ZXJ5IG9wZW4pLCBhbmQgYSB2YWx1ZSB0aGUgYXNzaXN0YW50IHJ1bnMgaXQgYXQuIFNoYXBlIGZvbGxvd3MgdGhlIGdyb3VwJ3MgdHlwZTogZGF0ZVJhbmdlXG4vLyB1c2VzIHN0YXJ0L2VuZCAoYSBmaXhlZCBjYWxlbmRhci1kYXkgcmFuZ2UpIG9yIGEgcmVsYXRpdmUgcHJlc2V0OyBzZWxlY3Rcbi8vIHVzZXMgdmFsdWVzIG9yIGV4Y2x1ZGVWYWx1ZXMsIG5ldmVyIGJvdGg7IGtleXdvcmQgdXNlcyB2YWx1ZTsgbnVtYmVyUmFuZ2Vcbi8vIHVzZXMgbWluIGFuZCBtYXguXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckdyb3VwRGVmYXVsdCB7XG4gIC8vIGRhdGVSYW5nZSByZWxhdGl2ZSBwcmVzZXQsIHJlc29sdmVkIG9uIGV2ZXJ5IG9wZW4gYWdhaW5zdCB0b2RheSBpbiB0aGVcbiAgLy8gcmVwb3J0J3MgZWZmZWN0aXZlIHpvbmUgKFJlcG9ydC5lZmZlY3RpdmVUaW1lem9uZSkuIE9uZSBvZjogdGhpc1dlZWssXG4gIC8vIGxhc3RXZWVrLCBsYXN0N0RheXMsIGxhc3QzMERheXMsIGxhc3QzTW9udGhzLCBsYXN0Nk1vbnRocywgbGFzdDEyTW9udGhzLFxuICAvLyB0aGlzTW9udGgsIHRoaXNRdWFydGVyLCB0aGlzWWVhci95ZWFyVG9EYXRlLiBXZWVrcyBydW4gTW9uZGF5IHRvIFN1bmRheSxcbiAgLy8gdGhlIHNhbWUgd2Vla3MgdGhlIHNlcnZlcidzIHdlZWtseSB0aW1lIGJ1Y2tldHMgdXNlLlxuICByZWxhdGl2ZT86IHN0cmluZztcbiAgc3RhcnQ/OiBzdHJpbmc7IC8vIGRhdGVSYW5nZSBmaXhlZCBzdGFydCAoeXl5eS1NTS1kZClcbiAgZW5kPzogc3RyaW5nOyAvLyBkYXRlUmFuZ2UgZml4ZWQgZW5kICh5eXl5LU1NLWRkKVxuICB2YWx1ZXM/OiB1bmtub3duW107IC8vIHNlbGVjdCBkZWZhdWx0IHBpY2tlZCB2YWx1ZXNcbiAgdmFsdWU/OiBzdHJpbmc7IC8vIGtleXdvcmQgZGVmYXVsdCB0ZXh0XG4gIC8vIHNlbGVjdDogdGhlIHZhbHVlcyB0byBsZWF2ZSBvdXQgKHJvd3Mgd2l0aCBhIGJsYW5rIHZhbHVlIGFyZSBrZXB0KS5cbiAgZXhjbHVkZVZhbHVlcz86IHVua25vd25bXTtcbiAgLy8gbnVtYmVyUmFuZ2U6IHRoZSBsb3cgYW5kIGhpZ2ggZW5kcywgZWl0aGVyIG9uZSBvcGVuIChhYnNlbnQpLiAwIGlzIGFuXG4gIC8vIGVuZCBsaWtlIGFueSBvdGhlci5cbiAgbWluPzogbnVtYmVyO1xuICBtYXg/OiBudW1iZXI7XG59XG5cbi8vIFRoZSBzZXNzaW9uIHZhbHVlIG9mIGEgZmlsdGVyIGdyb3VwOiBzaGFwZSBkZXBlbmRzIG9uIHRoZSBncm91cCdzIHR5cGUuIE5vdFxuLy8gc3RvcmVkIG9uIHRoZSBzZXJ2ZXI6IGl0IGxpdmVzIGluIHRoZSBvcGVuIHJlcG9ydCdzIHN0YXRlXG4vLyAoUmVwb3J0RmlsdGVyU3RhdGVTZXJ2aWNlKS5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyR3JvdXBWYWx1ZSB7XG4gIHN0YXJ0PzogRGF0ZSB8IHN0cmluZyB8IG51bGw7IC8vIGRhdGVSYW5nZVxuICBlbmQ/OiBEYXRlIHwgc3RyaW5nIHwgbnVsbDsgLy8gZGF0ZVJhbmdlXG4gIHZhbHVlcz86IHVua25vd25bXTsgLy8gc2VsZWN0XG4gIHZhbHVlPzogc3RyaW5nOyAvLyBrZXl3b3JkXG4gIC8vIGRhdGVSYW5nZSBvbmx5OiB0aGUgcmVsYXRpdmUgcHJlc2V0IG5hbWUgdGhlc2UgZGF0ZXMgd2VyZSByZXNvbHZlZCBmcm9tXG4gIC8vIChhIEZpbHRlckdyb3VwRGVmYXVsdC5yZWxhdGl2ZSBuYW1lKS4gU2V0IG9ubHkgd2hlbiB0aGUgdmFsdWUgd2FzIHNlZWRlZFxuICAvLyBmcm9tIHRoZSBncm91cCdzIHJlbGF0aXZlIGRlZmF1bHQsIHNvIHRoZSByYW5nZSBrZWVwcyByb2xsaW5nXG4gIC8vICgnbGFzdDMwRGF5cycpIGluc3RlYWQgb2YgZnJlZXppbmcgdHdvIGRhdGVzLCBhbmQgdGhlIGRhdGEgcmVxdWVzdCBuYW1lcyB0aGVcbiAgLy8gcGVyaW9kIGl0IGNvdmVycyAoc2VlXG4gIC8vIFJlc29sdmVkRmlsdGVyVmFsdWUucHJlc2V0KS4gQW55IGRhdGUgcGlja2VkIGJ5IHRoZSB2aWV3ZXIsIGEgZGF0ZSBwaWNrZXJcbiAgLy8gcHJlc2V0IGluY2x1ZGVkLCBpcyBzdG9yZWQgd2l0aG91dCBpdC5cbiAgcHJlc2V0Pzogc3RyaW5nO1xuICAvLyBzZWxlY3Q6IHRoZSB2YWx1ZXMgdG8gbGVhdmUgb3V0LiBTd2l0Y2hpbmcgYSBzZWxlY3QgYmV0d2VlbiBrZWVwaW5nIGFuZFxuICAvLyBsZWF2aW5nIG91dCBtb3ZlcyBpdHMgbGlzdCBmcm9tIHZhbHVlcyB0byBleGNsdWRlVmFsdWVzLlxuICBleGNsdWRlVmFsdWVzPzogdW5rbm93bltdO1xuICAvLyBudW1iZXJSYW5nZTogdGhlIGxvdyBhbmQgaGlnaCBlbmRzOyBudWxsIG9yIGFic2VudCA9IG9wZW4uXG4gIG1pbj86IG51bWJlciB8IG51bGw7XG4gIG1heD86IG51bWJlciB8IG51bGw7XG59XG5cbi8vIEEgcmVsYXRpdmUgZGF0ZSByYW5nZSB0aGUgc2VydmVyIHJlc29sdmVzIGFnYWluc3QgdG9kYXkgaW4gdGhlIHJlcG9ydCdzXG4vLyB6b25lOiB0aGUgbmFtZXMgYSBGaWx0ZXJHcm91cERlZmF1bHQucmVsYXRpdmUgYW5kIGEgdGltZWZyYW1lJ3MgcmFuZ2UgdGFrZS5cbi8vIE1pcnJvcnMgdGhlIHNlcnZlcidzIFJlcG9ydFJlbGF0aXZlUmFuZ2VFbnVtIHZhbHVlIGZvciB2YWx1ZVxuLy8gKFJlcG9ydFJlbGF0aXZlUmFuZ2VFbnVtVGVzdCBwaW5zIHRoZSBkYXlzIGVhY2ggb25lIGNvdmVycykuXG5leHBvcnQgdHlwZSBSZXBvcnRSZWxhdGl2ZVJhbmdlID1cbiAgfCAndGhpc1dlZWsnXG4gIHwgJ2xhc3RXZWVrJ1xuICB8ICdsYXN0N0RheXMnXG4gIHwgJ2xhc3QzMERheXMnXG4gIHwgJ2xhc3QzTW9udGhzJ1xuICB8ICdsYXN0Nk1vbnRocydcbiAgfCAnbGFzdDEyTW9udGhzJ1xuICB8ICd0aGlzTW9udGgnXG4gIHwgJ3RoaXNRdWFydGVyJ1xuICB8ICd0aGlzWWVhcidcbiAgfCAneWVhclRvRGF0ZSc7XG5cbi8vIE9uZSByZXNvbHZlZCBmaWx0ZXIgc2VudCB3aXRoIGEgY29tcG9uZW50J3MgZGF0YSByZXF1ZXN0LlxuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZEZpbHRlclZhbHVlIHtcbiAgZmlsdGVySWQ6IG51bWJlcjtcbiAgc3RhcnQ/OiBzdHJpbmc7XG4gIGVuZD86IHN0cmluZztcbiAgdmFsdWVzPzogdW5rbm93bltdO1xuICB2YWx1ZT86IHN0cmluZztcbiAgLy8gZGF0ZVJhbmdlIG9ubHk6IHRoZSByZWxhdGl2ZSByYW5nZSBzdGFydCBhbmQgZW5kIHN0aWxsIGFyZSwgc2VudCBvbmx5XG4gIC8vIHdoaWxlIHRoZXkgYXJlIGV4YWN0bHkgdGhhdCByYW5nZSByZXNvbHZlZCB0b2RheSBpbiB0aGUgcmVwb3J0J3Mgem9uZS4gSXRcbiAgLy8gdGVsbHMgdGhlIHNlcnZlciB3aGljaCBwZXJpb2QgdGhlIGRheXMgY292ZXIgKG9uIHRoZSBmaXJzdCBkYXlzIG9mIGFcbiAgLy8gcXVhcnRlciwgdGhpc01vbnRoIGFuZCB0aGlzUXVhcnRlciBhcmUgdGhlIHNhbWUgZGF5cyksIHNvIGEgY29tcGFyaXNvblxuICAvLyBzaGlmdHMgYnkgdGhlIHJpZ2h0IHVuaXQuIHN0YXJ0IGFuZCBlbmQgc3RheSB0aGUgd2luZG93OyBhIHNlcnZlciB0aGF0XG4gIC8vIGRvZXMgbm90IGtub3cgdGhlIGtleSBpZ25vcmVzIGl0LlxuICBwcmVzZXQ/OiBSZXBvcnRSZWxhdGl2ZVJhbmdlO1xuICAvLyBzZWxlY3Q6IHRoZSB2YWx1ZXMgdG8gbGVhdmUgb3V0IChzZW50IGluc3RlYWQgb2YgdmFsdWVzKS5cbiAgZXhjbHVkZVZhbHVlcz86IHVua25vd25bXTtcbiAgLy8gbnVtYmVyUmFuZ2U6IHRoZSBsb3cgYW5kIGhpZ2ggZW5kczsgYW4gb3BlbiBlbmQgaXMgbGVmdCBvdXQsIDAgaXMgc2VudC5cbiAgbWluPzogbnVtYmVyO1xuICBtYXg/OiBudW1iZXI7XG59XG5cbi8vIFBlci1jb21wb25lbnQgaW50ZXJhY3Rpb24gc3RhdGUgc2VudCB3aXRoIHRoZSBkYXRhIHJlcXVlc3Q6IGxpc3RzIHNlbmRcbi8vIHNvcnQvcGFnaW5nIGFuZCB0aGUgdGV4dCBpbiB0aGVpciBzZWFyY2ggYm94OyB0aW1lLXNlcmllcyBjaGFydHMgc2VuZCB0aGVcbi8vIGdyYWluIHBpY2tlZCBvbiB0aGUgcmVwb3J0J3MgZ3JvdXAtYnkgY29udHJvbCwgd2hpY2ggb3ZlcnJpZGVzIHRoZSBhdXRob3JlZFxuLy8gZ3JhbnVsYXJpdHkgZm9yIHRoYXQgcmVxdWVzdCBvbmx5LiBUaGUgd2lyZSBrZXkgc3RheXMgYGZyZXF1ZW5jeWAg4oCUIGl0IGlzIHRoZVxuLy8gYnVja2V0aW5nIGZyZXF1ZW5jeSB0aGUgc2VydmVyIGFwcGxpZXMuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERhdGFTdGF0ZSB7XG4gIHNvcnQ/OiBSZXBvcnRTb3J0O1xuICBwYWdlPzogbnVtYmVyO1xuICBwYWdlU2l6ZT86IG51bWJlcjtcbiAgZnJlcXVlbmN5PzogQ2hhcnRHcmFudWxhcml0eTtcbiAgLy8gQSBsaXN0J3Mgc2VhcmNoIGJveCB0ZXh0LiBUaGUgc2VydmVyIHRyaW1zIGl0LCBjdXRzIGl0IHRvIGl0cyBvd24gbWF4aW11bVxuICAvLyBsZW5ndGggYW5kIG1hdGNoZXMgaXQgYWdhaW5zdCBldmVyeSB0ZXh0IGNvbHVtbiB0aGUgbGlzdCBzaG93cy5cbiAgc2VhcmNoPzogc3RyaW5nO1xuICAvLyBUaGUgY29uZmlnIGNvbHVtbiBuYW1lcyBhIHZpZXdlciBoaWQgb24gYSBwbGFpbiBsaXN0LiBTZW50IHdpdGggYSBDU1ZcbiAgLy8gZXhwb3J0IG9ubHkgKHRoZSBzY3JlZW4gaGlkZXMgdGhlbSBpdHNlbGYpOiB0aGUgZmlsZSBsZWF2ZXMgdGhlbSBvdXQuIFRoZVxuICAvLyBzZXJ2ZXIgaWdub3JlcyBpdCBvbiBhIGNyb3NzLXRhYiwgYW5kIHdoZW4gaXQgd291bGQgaGlkZSBldmVyeSBjb2x1bW4uXG4gIGhpZGRlbkNvbHVtbnM/OiBzdHJpbmdbXTtcbiAgLy8gQSBjaGFydCdzIGRyaWxsIHBhdGgsIHRvcCBmaXJzdC4gVGhlIGRyaWxsZWQgbGV2ZWwgd2lucyBvdmVyIGZyZXF1ZW5jeVxuICAvLyBmb3IgdGhpcyB0aWxlLlxuICBkcmlsbD86IFJlcG9ydERyaWxsU3RlcFtdO1xuICAvLyBXaGlsZSBtYXRjaCBpcyBhbnk6IHRoZSBlbGlnaWJsZSBncm91cHMgdGhhdCBoYXZlIGEgdmFsdWUuXG4gIG1hdGNoQW55R3JvdXBJZHM/OiBudW1iZXJbXTtcbiAgLy8gU2V0IG9ubHkgb24gYSByZXF1ZXN0IHNlbnQgYmVjYXVzZSB0aGUgY3Jvc3MtZmlsdGVyIGNoYW5nZWQsIGZvciBhIHRpbGVcbiAgLy8gd2hvc2UgbGFzdCByZWFkIGFwcGxpZWQgbm8gY3Jvc3MgZW50cnk6IHRoZSBzZXJ2ZXIgbWF5IGFuc3dlclxuICAvLyB1bmNoYW5nZWQgaW5zdGVhZCBvZiByZWFkaW5nIHRoZSByb3dzIGFnYWluLiBFeHBvcnRzIG5ldmVyIHNldCBpdC5cbiAgdW5jaGFuZ2VkSWZVbnJlYWNoZWQ/OiB0cnVlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERhdGEge1xuICBjb2x1bW5zOiBzdHJpbmdbXTtcbiAgcm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbiAgcGFnaW5nPzogeyB0b3RhbDogbnVtYmVyOyBwYWdlOiBudW1iZXI7IHBhZ2VTaXplOiBudW1iZXIgfTtcbiAgdHJ1bmNhdGVkOiBib29sZWFuO1xuICAvLyBUaGUgZWZmZWN0aXZlIHRpbWUgYnVja2V0IHRoZSByb3dzIHdlcmUgZ3JvdXBlZCBpbnRvIChhZnRlciBhbnkgZ3JvdXAtYnlcbiAgLy8gb3ZlcnJpZGUpLCBvciBudWxsIGZvciBhIG5vbi10aW1lIGF4aXMuIERyaXZlcyB0aGUgY29tcGFjdCB4LWF4aXMgbGFiZWxzLlxuICBncmFudWxhcml0eT86IENoYXJ0R3JhbnVsYXJpdHkgfCBudWxsO1xuICAvLyBQYWdlIDEgb2YgYSBzZWFyY2hlZCBsaXN0IHdob3NlIHNlYXJjaCBjb3VsZCBub3QgYXBwbHkgKHRoZSBsaXN0IGhhcyBub1xuICAvLyB0ZXh0IGNvbHVtbiB0byBzZWFyY2gpOiB3aHkgdGhlIHJvd3MgYXJlIG5vdCBuYXJyb3dlZC4gQWJzZW50IG90aGVyd2lzZS5cbiAgc2VhcmNoTm90ZT86IHN0cmluZyB8IG51bGw7XG4gIC8vIFBhZ2UgMSBvZiBhIGxpc3Qgd2l0aCBjb25maWcudG90YWxzIG9uOiBpdHMgdG90YWxzIHJvdywgYXMgcmF3IHZhbHVlc1xuICAvLyBrZXllZCBsaWtlIHRoZSBjb2x1bW5zIChhIHBsYWluIGxpc3QncyBtZWFzdXJlIGFsaWFzZXM7IGEgY3Jvc3MtdGFiJ3NcbiAgLy8gcGl2b3QgY2VsbCBjb2x1bW5zLCB0aGUgcm93LWtleSBjb2x1bW4gYWJzZW50KSwgb3IgbnVsbCB3aXRoIHRvdGFsc05vdGVcbiAgLy8gc2F5aW5nIHdoeSB0aGVyZSBpcyBub25lLiBBYnNlbnQgb24gZXZlcnkgb3RoZXIgcGFnZSBhbmQgbGlzdC5cbiAgdG90YWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsO1xuICB0b3RhbHNOb3RlPzogc3RyaW5nIHwgbnVsbDtcbiAgLy8gVGhlIHdpbmRvdyBvZiBkYXlzIHRoZSBjb21wb25lbnQgcmVhZHMsIHdoZW4gaXRzIHF1ZXJ5IGhhcyBhIHRpbWVmcmFtZS5cbiAgLy8gQWJzZW50IG90aGVyd2lzZSwgYW5kIGZyb20gb2xkZXIgc2VydmVycy5cbiAgdGltZWZyYW1lPzogQ29tcG9uZW50VGltZWZyYW1lIHwgbnVsbDtcbiAgLy8gVGhlIGN1cnJlbnQgYW5kIHByaW9yIHdpbmRvd3Mgb2YgYSBjb21wb25lbnQgd2hvc2UgbWVhc3VyZXMgY29tcGFyZVxuICAvLyBhZ2FpbnN0IGFuIGVhcmxpZXIgcGVyaW9kLiBBYnNlbnQgd2hlbiBubyBtZWFzdXJlIGNvbXBhcmVzLiBTZW50IG9uIGV2ZXJ5XG4gIC8vIGxpc3QgcGFnZSBhbmQgb24gY2hhcnQgYW5kIEtQSSBkYXRhLlxuICBjb21wYXJpc29uPzogQ29tcG9uZW50Q29tcGFyaXNvbiB8IG51bGw7XG4gIC8vIFdoYXQgZWFjaCBjb21wYXJlZCwgd2luZG93ZWQsIHJhbmtlZCBvciBzaGFyZWQgb3V0cHV0IGNvbHVtbiBpcywgYnkgYWxpYXMuXG4gIC8vIFBsYWluIG1lYXN1cmUgY29sdW1ucyBhcmUgbGVmdCBvdXQuXG4gIG91dHB1dHM/OiBSZWNvcmQ8c3RyaW5nLCBPdXRwdXRNZXRhPjtcbiAgLy8gQSBjcm9zcy10YWIgb25seTogdGhlIG1lYXN1cmUgYWxpYXMgZWFjaCBwaXZvdCBjZWxsIGNvbHVtbiBob2xkcywgc28gYVxuICAvLyBjZWxsIHRha2VzIGl0cyBtZWFzdXJlJ3Mgb3V0cHV0IG1lYW5pbmcuIE5ldmVyIHNlbnQgZm9yIGEgc3FsLW1vZGUgbGlzdC5cbiAgY2VsbE1lYXN1cmVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLy8gSG93IGVhY2ggd2luZG93ZWQgb3V0cHV0IGNvbHVtbiAocnVubmluZywgdG8tZGF0ZSBvciByb2xsaW5nKSB3YXNcbiAgLy8gY29tcHV0ZWQsIGJ5IGFsaWFzLlxuICB3aW5kb3dzPzogUmVjb3JkPHN0cmluZywgV2luZG93TWV0YT47XG4gIC8vIEEgS1BJIHdpdGggYSBjb21wYXJpc29uLCBhIHRhcmdldCBvciBhIHNwYXJrbGluZTogZXZlcnkgbnVtYmVyIHRoZSBjYXJkXG4gIC8vIHNob3dzIGJlc2lkZSBpdHMgdmFsdWUsIGRlY2lkZWQgYnkgdGhlIHNlcnZlci5cbiAga3BpPzogQ29tcG9uZW50S3BpIHwgbnVsbDtcbiAgLy8gVGhlIHRpbWUtYXhpcyB2YWx1ZSBvZiB0aGUgYnVja2V0IGNvbnRhaW5pbmcgdG9kYXksIHdyaXR0ZW4gYXMgdGhlIHJvd3NcbiAgLy8gd3JpdGUgaXQsIHdoZW4gdGhhdCBidWNrZXQgaXMgbm90IGZpbmlzaGVkIHlldDsgbnVsbCBvdGhlcndpc2UuIEEgY2hhcnRcbiAgLy8gbWFya3MgaXQgYXMgcGFydGlhbC5cbiAgcGFydGlhbFBlcmlvZD86IHN0cmluZyB8IG51bGw7XG4gIC8vIFdoaWNoIGZpbHRlcnMgdGhlIHJlYWQgYXBwbGllZC4gQWJzZW50IGZyb20gb2xkZXIgc2VydmVycy5cbiAgYXBwbGllZD86IENvbXBvbmVudERhdGFBcHBsaWVkO1xuICAvLyBBIGRyaWxsYWJsZSBjaGFydCdzIGRyaWxsIHN0YXRlLiBBYnNlbnQgb24gZXZlcnkgb3RoZXIgdGlsZSBhbmQgZnJvbVxuICAvLyBvbGRlciBzZXJ2ZXJzLlxuICBkcmlsbD86IENvbXBvbmVudERhdGFEcmlsbDtcbn1cblxuLy8gV2hlcmUgYSBjb21wb25lbnQncyB0aW1lZnJhbWUgd2luZG93IGNhbWUgZnJvbTogYSB2aWV3ZXIgZGF0ZVJhbmdlIGJvdW5kIHRvXG4vLyB0aGUgdGltZWZyYW1lIGNvbHVtbiAod2hpY2ggcmVwbGFjZXMgdGhlIGF1dGhvcmVkIHJhbmdlLCBuZXZlciBuYXJyb3dzXG4vLyBpdCksIHRoZSBhdXRob3JlZCByZWxhdGl2ZSByYW5nZSwgdGhlIGF1dGhvcmVkIGZpeGVkIGRheXMsIG9yIG5vdGhpbmcgKGFuXG4vLyBvcGVuIHdpbmRvdykuXG5leHBvcnQgdHlwZSBUaW1lZnJhbWVTb3VyY2UgPSAnZmlsdGVyJyB8ICdyYW5nZScgfCAnZml4ZWQnIHwgJ25vbmUnO1xuXG4vLyBUaGUgd2luZG93IGEgY29tcG9uZW50J3MgdGltZWZyYW1lIHJlc29sdmVkIHRvLiBzdGFydCBhbmQgZW5kIGFyZVxuLy8gaW5jbHVzaXZlICd5eXl5LU1NLWRkJyBkYXlzIGluIHRoZSByZXBvcnQncyB6b25lLCB3cml0dGVuIHdpdGhvdXQgYSB6b25lLlxuLy8gdGhyb3VnaCBpcyB0aGUgVVRDICd5eXl5LU1NLWRkIEhIOm1tOnNzJyBpbnN0YW50IGEgd2luZG93IG9uIGEgZGF0ZXRpbWVcbi8vIGNvbHVtbiBpcyBjdXQgYXQ7IGl0IHJlYWRzIGFzIGEgdGltZSBpbiB0aGUgcmVwb3J0IHpvbmUuIEl0IGlzIHNldCBvbmx5IHdoZW5cbi8vIGEgY29tcGFyaXNvbiBjdXRzIGEgd2luZG93IHRoYXQgZW5kcyB0b2RheTogYSB0aW1lZnJhbWUgb24gaXRzIG93biByZWFkc1xuLy8gd2hvbGUgZGF5cywgc28gYSB3aW5kb3cgZW5kaW5nIHRvZGF5IHdpdGhvdXQgYSBjb21wYXJpc29uIHNlbmRzIG51bGwuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudFRpbWVmcmFtZSB7XG4gIGNvbHVtbjogc3RyaW5nO1xuICBzdGFydDogc3RyaW5nIHwgbnVsbDtcbiAgZW5kOiBzdHJpbmcgfCBudWxsO1xuICB0aHJvdWdoOiBzdHJpbmcgfCBudWxsO1xuICByYW5nZTogUmVwb3J0UmVsYXRpdmVSYW5nZSB8IG51bGw7XG4gIHNvdXJjZTogVGltZWZyYW1lU291cmNlO1xufVxuXG4vLyBIb3cgYSBjb21wYXJpc29uIGlzIGxhaWQgb3V0OiBvbmUgdmFsdWUgcGVyIHdpbmRvdyAocmFuZ2UpLCBhIHByaW9yIHNlcmllc1xuLy8gYmVzaWRlIGEgdGltZSBheGlzIChzZXJpZXMpLCBvciBlYWNoIHBlcmlvZCdzIHZhbHVlIHJlYWQgYXQgaXRzIGVuZCwgc2V0XG4vLyBhZ2FpbnN0IHRoZSB2YWx1ZSBhdCB0aGUgZW5kIG9mIGFuIGVhcmxpZXIgcGVyaW9kIChwZXJpb2RfZW5kKS5cbmV4cG9ydCB0eXBlIENvbXBhcmlzb25Nb2RlID0gJ3JhbmdlJyB8ICdzZXJpZXMnIHwgJ3BlcmlvZF9lbmQnO1xuXG4vLyB0b19kYXRlIGNvbXBhcmVzIGxpa2Ugd2l0aCBsaWtlICh0aGUgZmlyc3QgMiBkYXlzIG9mIGEgbW9udGggYWdhaW5zdCB0aGVcbi8vIGZpcnN0IDIgZGF5cyBvZiB0aGUgb25lIGJlZm9yZSk7IGZ1bGwgY29tcGFyZXMgd2hvbGUgcGVyaW9kcy5cbmV4cG9ydCB0eXBlIENvbXBhcmlzb25BbGlnbiA9ICd0b19kYXRlJyB8ICdmdWxsJztcblxuLy8gV2hhdCBhIG1lYXN1cmUgaXMgY29tcGFyZWQgYWdhaW5zdC4gTWlycm9ycyB0aGUgc2VydmVyJ3Ncbi8vIENvbXBhcmlzb25BZ2FpbnN0RW51bSB2YWx1ZSBmb3IgdmFsdWUuXG5leHBvcnQgdHlwZSBDb21wYXJpc29uQWdhaW5zdCA9XG4gIHwgJ3ByZXZpb3VzX3BlcmlvZCdcbiAgfCAncHJldmlvdXNfd2VlaydcbiAgfCAncHJldmlvdXNfbW9udGgnXG4gIHwgJ3ByZXZpb3VzX3F1YXJ0ZXInXG4gIHwgJ3ByZXZpb3VzX3llYXInXG4gIHwgJ3JhbmdlJztcblxuLy8gV2h5IGEgY29tcGFyaXNvbiByZWFkcyBhcyBpdCBkb2VzLiBUaGUgc2VydmVyIHNlbmRzIGNvZGVzLCBuZXZlclxuLy8gc2VudGVuY2VzOyB0aGUgdmlld2VyIHdvcmRzIHRoZW0uXG4vLyAtIG5vX3dpbmRvdzogbm8gZGF0ZSByYW5nZSB0byBjb21wYXJlIHlldDtcbi8vIC0gdW5pdF9pbmZlcnJlZDogdGhlIHBlcmlvZCB1bml0IHdhcyBpbmZlcnJlZCBmcm9tIHRoZSBkYXlzLCBub3QgbmFtZWQ7XG4vLyAtIHdpbmRvd19pbl9mdXR1cmU6IHRoZSB3aW5kb3cgc3RhcnRzIGFmdGVyIHRvZGF5O1xuLy8gLSBvdGhlcl9kYXRlX2ZpbHRlcjogYSBkYXRlIGZpbHRlciBvbiBhbm90aGVyIGNvbHVtbiBhbHNvIGFwcGxpZXM7XG4vLyAtIGdyYWluX2ZvbGxvd2VkOiB0aGUgcHJpb3IgZm9sbG93cyB0aGUgZ3JvdXAtYnkgZ3JhaW4gcGlja2VkIG9uIHRoZSByZXBvcnQuXG5leHBvcnQgdHlwZSBDb21wYXJpc29uTm90ZUNvZGUgPVxuICB8ICdub193aW5kb3cnXG4gIHwgJ3VuaXRfaW5mZXJyZWQnXG4gIHwgJ3dpbmRvd19pbl9mdXR1cmUnXG4gIHwgJ290aGVyX2RhdGVfZmlsdGVyJ1xuICB8ICdncmFpbl9mb2xsb3dlZCc7XG5cbi8vIE9uZSBjb21wYXJpc29uIHdpbmRvdzogaW5jbHVzaXZlICd5eXl5LU1NLWRkJyBkYXlzIGluIHRoZSByZXBvcnQncyB6b25lLFxuLy8gYW5kIHRoZSBVVEMgaW5zdGFudCBpdCBpcyBjdXQgYXQgd2hlbiBpdCBlbmRzIHRvZGF5IG9uIGEgZGF0ZXRpbWUgY29sdW1uLlxuLy8gSW4gc2VyaWVzIG1vZGUgaXQgaXMgdGhlIHNwYW4gdGhlIGNoYXJ0IHNob3dzLlxuZXhwb3J0IGludGVyZmFjZSBDb21wYXJpc29uV2luZG93IHtcbiAgc3RhcnQ6IHN0cmluZztcbiAgZW5kOiBzdHJpbmc7XG4gIHRocm91Z2g6IHN0cmluZyB8IG51bGw7XG59XG5cbi8vIEhvdyBmYXIgYmFjayBvbmUgcHJpb3IgbGFuZSBzaXRzLiBBIGN1c3RvbSByYW5nZSBoYXMgbm8gdW5pdCBvciBjb3VudCwgYW5kXG4vLyBuZWl0aGVyIGRvZXMgcHJldmlvdXNfcGVyaW9kIHdoZW4gdGhlcmUgaXMgbm8gY3VycmVudCB3aW5kb3cgdG8gbWVhc3VyZVxuLy8gKG5vX3dpbmRvdywgd2luZG93X2luX2Z1dHVyZSk7IGEgc2hpZnQgYnkgdGhlIHdpbmRvdydzIGxlbmd0aCBpcyB1bml0IGRheVxuLy8gd2l0aCB0aGUgbGVuZ3RoIGFzIHRoZSBjb3VudDsgYSBwcmV2aW91cyB5ZWFyIGlzIDM2NCBkYXlzIG9uIGEgZGF5IGF4aXMgYW5kXG4vLyA1MiB3ZWVrcyBvbiBhIHdlZWsgYXhpcy5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGFyaXNvbk9mZnNldCB7XG4gIGFnYWluc3Q6IENvbXBhcmlzb25BZ2FpbnN0O1xuICB1bml0OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbDtcbiAgY291bnQ6IG51bWJlciB8IG51bGw7XG59XG5cbi8vIEEgY29tcG9uZW50J3MgY29tcGFyaXNvbjogdGhlIHpvbmUgaXRzIGRheXMgYXJlIGluLCB0aGUgY3VycmVudCB3aW5kb3dcbi8vIChudWxsIHdoZW4gdGhlcmUgaXMgbm8gd2luZG93IHRvIGNvbXBhcmUgeWV0LCBvciB3aGVuIGEgdGltZSBheGlzIHJ1bnNcbi8vIG92ZXIgYWxsIHRoZSBkYXRhLCB3aGljaCBoYXMgbm8gZmlyc3QgZGF5IHRvIG5hbWUpIGFuZCB1cCB0byAyIHByaW9yXG4vLyBsYW5lczogb2Zmc2V0c1tpXSBkZXNjcmliZXMgbGFuZSBpICsgMSwgYW5kIHByaW9yc1tpXSBpdHMgd2luZG93LiBXaXRoIG5vXG4vLyBjdXJyZW50IHdpbmRvdyBwcmlvcnMgaXMgZW1wdHksIHdoaWxlIG9mZnNldHMgc3RpbGwgbmFtZXMgZXZlcnkgbGFuZS5cbi8vIGZsb29yIGlzIHRoZSAneXl5eS1NTS1kZCcgZGF5IG9mIHRoZSBmaXJzdCByb3cgdGhlIHF1ZXJ5J3Mgb3duIGNvbmRpdGlvbnNcbi8vIGtlZXAgKHZpZXdlciBmaWx0ZXJzIGFzaWRlKTogYSBwcmlvciB3aW5kb3cgd2hvbGx5IGJlZm9yZSBpdCBoYXMgbm8gZGF0YVxuLy8gcmF0aGVyIHRoYW4gYSB6ZXJvLlxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRDb21wYXJpc29uIHtcbiAgbW9kZTogQ29tcGFyaXNvbk1vZGU7XG4gIHRpbWV6b25lOiBzdHJpbmc7XG4gIGFsaWduOiBDb21wYXJpc29uQWxpZ247XG4gIGN1cnJlbnQ6IENvbXBhcmlzb25XaW5kb3cgfCBudWxsO1xuICBwcmlvcnM6IENvbXBhcmlzb25XaW5kb3dbXTtcbiAgb2Zmc2V0czogQ29tcGFyaXNvbk9mZnNldFtdO1xuICBmbG9vcjogc3RyaW5nIHwgbnVsbDtcbiAgbm90ZXM6IENvbXBhcmlzb25Ob3RlQ29kZVtdO1xufVxuXG4vLyBXaGF0IGFuIG91dHB1dCBjb2x1bW4gaG9sZHM6IGEgbWVhc3VyZSdzIHZhbHVlLCBpdHMgcmFuayBvciBpdHMgc2hhcmUuXG5leHBvcnQgdHlwZSBPdXRwdXRLaW5kID0gJ3ZhbHVlJyB8ICdyYW5rJyB8ICdzaGFyZSc7XG5cbi8vIFdoaWNoIHNpZGUgb2YgYSBjb21wYXJpc29uIGFuIG91dHB1dCBjb2x1bW4gaXM6IHRoZSBjdXJyZW50IHZhbHVlLCB0aGVcbi8vIHByaW9yIG9uZSwgdGhlaXIgZGlmZmVyZW5jZSwgb3IgdGhlIGRpZmZlcmVuY2UgYXMgYSAwLTEgZnJhY3Rpb24gb2YgdGhlXG4vLyBwcmlvci4gbnVsbCBmb3IgYW4gb3V0cHV0IHRoYXQgaXMgbm90IGNvbXBhcmVkLlxuZXhwb3J0IHR5cGUgT3V0cHV0Um9sZSA9ICdjdXJyZW50JyB8ICdwcmlvcicgfCAnY2hhbmdlJyB8ICdwZXJjZW50X2NoYW5nZSc7XG5cbi8vIEhvdyB0aWVkIHZhbHVlcyByYW5rOiAxLCAxLCAzIChjb21wZXRpdGlvbikgb3IgMSwgMSwgMiAoZGVuc2UpLlxuZXhwb3J0IHR5cGUgT3V0cHV0UmFua01ldGhvZCA9ICdjb21wZXRpdGlvbicgfCAnZGVuc2UnO1xuXG4vLyBBIHJhbmsgb3V0cHV0OiBob3cgdGllcyByYW5rLCB3aGljaCBlbmQgcmFua3MgMSAoZGVzYzogdGhlIGxhcmdlc3QpLCBhbmRcbi8vIHRoZSBkaW1lbnNpb24gb3V0cHV0cyBpdCByZXN0YXJ0cyB3aXRoaW4gKG5vbmU6IHRoZSB3aG9sZSByZXN1bHQpLlxuZXhwb3J0IGludGVyZmFjZSBPdXRwdXRSYW5rIHtcbiAgbWV0aG9kOiBPdXRwdXRSYW5rTWV0aG9kO1xuICBkaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnO1xuICB3aXRoaW46IHN0cmluZ1tdO1xufVxuXG4vLyBBIHNoYXJlIG91dHB1dDogdGhlIGRpbWVuc2lvbiBvdXRwdXRzIHdob3NlIHRvdGFsIGl0IGlzIGEgc2hhcmUgb2YgKG5vbmU6XG4vLyB0aGUgd2hvbGUgcmVzdWx0KS5cbmV4cG9ydCBpbnRlcmZhY2UgT3V0cHV0U2hhcmUge1xuICB3aXRoaW46IHN0cmluZ1tdO1xufVxuXG4vLyBUaGUgbWVhbmluZyBvZiBvbmUgY29tcGFyZWQsIHdpbmRvd2VkLCByYW5rZWQgb3Igc2hhcmVkIG91dHB1dCBjb2x1bW4uXG4vLyBtZWFzdXJlIGlzIHRoZSBzb3VyY2UgbWVhc3VyZSdzIGFsaWFzLCB3aG9zZSBmb3JtYXQgdGhlIGNvbHVtbiBpbmhlcml0cztcbi8vIG9mZnNldCBpcyB0aGUgcHJpb3IgbGFuZSBhIHByaW9yLCBjaGFuZ2Ugb3IgcGVyY2VudCBjaGFuZ2UgYmVsb25ncyB0byAoaXRzXG4vLyB3aW5kb3cgaXMgY29tcGFyaXNvbi5wcmlvcnNbb2Zmc2V0IC0gMV0pLiBVbmxlc3MgdGhlIGNvbmZpZyBmb3JtYXRzIGl0LCBhXG4vLyBzaGFyZSBwcmludHMgYXMgYSBwZXJjZW50IHRvIDEgZGVjaW1hbCBhbmQgYSByYW5rIGFzIGEgd2hvbGUgbnVtYmVyLlxuZXhwb3J0IGludGVyZmFjZSBPdXRwdXRNZXRhIHtcbiAgbWVhc3VyZTogc3RyaW5nO1xuICBraW5kOiBPdXRwdXRLaW5kO1xuICByb2xlOiBPdXRwdXRSb2xlIHwgbnVsbDtcbiAgb2Zmc2V0OiBudW1iZXIgfCBudWxsO1xuICB3aW5kb3c6IGJvb2xlYW47XG4gIHJhbms6IE91dHB1dFJhbmsgfCBudWxsO1xuICBzaGFyZTogT3V0cHV0U2hhcmUgfCBudWxsO1xufVxuXG4vLyBBIHdpbmRvdyBvdmVyIHRoZSByb3dzOiBhIHJ1bm5pbmcgdG90YWwsIGEgdG90YWwgdG8gZGF0ZSB3aXRoaW4gZWFjaFxuLy8gcGVyaW9kIChtb250aCB0byBkYXRlKSwgb3IgYSByb2xsaW5nIHNwYW4gb2YgcGVyaW9kcy5cbmV4cG9ydCB0eXBlIFdpbmRvd0tpbmQgPSAncnVubmluZycgfCAndG9fZGF0ZScgfCAncm9sbGluZyc7XG5cbi8vIFdoeSBhIHdpbmRvdyByZWFkcyBhcyBpdCBkb2VzLiBDb2RlcyBvbmx5OyB0aGUgdmlld2VyIHdvcmRzIHRoZW0uXG5leHBvcnQgdHlwZSBXaW5kb3dOb3RlQ29kZSA9XG4gIHwgJ3NuYXBwZWRfc3RhcnQnXG4gIHwgJ3NwYW5fY29udmVydGVkJ1xuICB8ICdncmFpbl90b29fY29hcnNlJ1xuICB8ICdlcXVhbF9ncmFpbl9wbGFpbidcbiAgfCAnb3duX2ZpbHRlcl9jYXBzX2xlYWRfaW4nXG4gIHwgJ3dlZWtfYnlfbW9uZGF5J1xuICB8ICdpbmNvbXBsZXRlX2hlYWQnO1xuXG4vLyBIb3cgb25lIHdpbmRvd2VkIG91dHB1dCBjb2x1bW4gd2FzIGNvbXB1dGVkLiBwZXJpb2RzIGFuZCB1bml0IHNpemUgYVxuLy8gcm9sbGluZyB3aW5kb3cgKGRyYXduUGVyaW9kcyBpcyB0aGF0IHNwYW4gY291bnRlZCBpbiB0aGUgZ3JhaW4gdGhlIHJvd3Ncbi8vIGFyZSBkcmF3biBhdCk7IHJlc2V0RXZlcnkgcmVzdGFydHMgYSB0by1kYXRlIHdpbmRvdzsgYXZlcmFnZSBtYWtlcyB0aGVcbi8vIHdpbmRvdyBhbiBhdmVyYWdlIHJhdGhlciB0aGFuIGEgdG90YWw7IGZyb21CZWdpbm5pbmdcbi8vIHJ1bnMgYSB0b3RhbCBmcm9tIHRoZSBmaXJzdCByb3cgZXZlciByYXRoZXIgdGhhbiBmcm9tIHRoZSBmaXJzdCByb3cgc2hvd24uXG4vLyBzdGFydCwgZW5kIGFuZCBsZWFkSW4gYXJlICd5eXl5LU1NLWRkJyByZXBvcnQtem9uZSBkYXlzOiB0aGUgcm93cyBzaG93bixcbi8vIGFuZCB0aGUgZWFybGllciBkYXkgdGhlIHdpbmRvdyByZWFkcyBmcm9tIHNvIGl0cyBmaXJzdCByb3dzIGFyZSB3aG9sZS5cbi8vIGRlc2NyaXB0aW9uIGlzIHRoZSBzZXJ2ZXIncyBFbmdsaXNoIGZvciB0aGUgYWdlbnQgYW5kIHRoZSBleHBvcnRzOyB0aGVcbi8vIHZpZXdlciBjb21wb3NlcyBpdHMgb3duIHdvcmRzIGZyb20gdGhlIGZpZWxkcy5cbmV4cG9ydCBpbnRlcmZhY2UgV2luZG93TWV0YSB7XG4gIGtpbmQ6IFdpbmRvd0tpbmQ7XG4gIHBlcmlvZHM6IG51bWJlciB8IG51bGw7XG4gIHVuaXQ6IENoYXJ0R3JhbnVsYXJpdHkgfCBudWxsO1xuICBkcmF3blBlcmlvZHM6IG51bWJlciB8IG51bGw7XG4gIHJlc2V0RXZlcnk6IENoYXJ0R3JhbnVsYXJpdHkgfCBudWxsO1xuICBhdmVyYWdlOiBib29sZWFuO1xuICBmcm9tQmVnaW5uaW5nOiBib29sZWFuO1xuICBkYXRlQ29sdW1uOiBzdHJpbmcgfCBudWxsO1xuICBzdGFydDogc3RyaW5nIHwgbnVsbDtcbiAgZW5kOiBzdHJpbmcgfCBudWxsO1xuICBsZWFkSW46IHN0cmluZyB8IG51bGw7XG4gIG5vdGVzOiBXaW5kb3dOb3RlQ29kZVtdO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xufVxuXG4vLyBXaGljaCBkZWx0YSBhIEtQSSBjYXJkIHNob3dzOiB0aGUgZGlmZmVyZW5jZSwgb3IgdGhlIHBlcmNlbnQgY2hhbmdlLlxuZXhwb3J0IHR5cGUgS3BpRGVsdGFTaG93ID0gJ2NoYW5nZScgfCAncGVyY2VudF9jaGFuZ2UnO1xuXG4vLyBXaHkgYSBLUEkncyBkZWx0YSByZWFkcyBhcyBpdCBkb2VzOlxuLy8gLSBub19wcmlvcl9kYXRhOiB0aGUgcHJpb3Igd2luZG93IGhhcyBubyB2YWx1ZTtcbi8vIC0gdXBfZnJvbV96ZXJvOiB0aGUgcHJpb3Igd2FzIDAsIHNvIHRoZXJlIGlzIG5vIHBlcmNlbnQgY2hhbmdlO1xuLy8gLSBub19jaGFuZ2U6IGJvdGggYXJlIDA7XG4vLyAtIG5vX2RhdGFfZWl0aGVyOiBuZWl0aGVyIHdpbmRvdyBoYXMgYSB2YWx1ZTtcbi8vIC0gc2lnbl9jaGFuZ2U6IHRoZSB2YWx1ZSBjcm9zc2VkIHplcm8sIHNvIHRoZXJlIGlzIG5vIHBlcmNlbnQgY2hhbmdlLlxuZXhwb3J0IHR5cGUgS3BpTm90ZUNvZGUgPVxuICB8ICdub19wcmlvcl9kYXRhJ1xuICB8ICd1cF9mcm9tX3plcm8nXG4gIHwgJ25vX2NoYW5nZSdcbiAgfCAnbm9fZGF0YV9laXRoZXInXG4gIHwgJ3NpZ25fY2hhbmdlJztcblxuLy8gQSBLUEkncyBwcm9ncmVzcyB0b3dhcmQgaXRzIGNvbmZpZ3VyZWQgdGFyZ2V0LiBwcm9ncmVzcyBpcyB2YWx1ZSAvIHRhcmdldFxuLy8gKG51bGwgd2hlbiB0aGUgdGFyZ2V0IGlzIDApOyBtZXQgZm9sbG93cyB0aGUgY29uZmlnJ3MgaW5jcmVhc2VJcyAobnVsbFxuLy8gd2hlbiBpdCBpcyBuZXV0cmFsKS5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50S3BpVGFyZ2V0IHtcbiAgdmFsdWU6IG51bWJlcjtcbiAgbGFiZWw6IHN0cmluZyB8IG51bGw7XG4gIHByb2dyZXNzOiBudW1iZXIgfCBudWxsO1xuICBtZXQ6IGJvb2xlYW4gfCBudWxsO1xufVxuXG4vLyBPbmUgc3BhcmtsaW5lIHBvaW50OiB0aGUgcGVyaW9kLCB3cml0dGVuIGFzIGEgdGltZS1heGlzIHZhbHVlLCBhbmQgdGhlXG4vLyB2YWx1ZSBpbiBpdCAobnVsbCB3aGVuIGEgbm9uLWFkZGl0aXZlIG1lYXN1cmUgaGFzIG5vIHJvd3MgdGhlcmUpLlxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRLcGlTcGFya2xpbmVQb2ludCB7XG4gIHBlcmlvZDogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyIHwgbnVsbDtcbn1cblxuLy8gQSBLUEkncyBzcGFya2xpbmUgcG9pbnRzLCBvbGRlc3QgZmlyc3QuIHBhcnRpYWwgc2F5cyB0aGUgbGFzdCBwZXJpb2QgaXNcbi8vIG5vdCBmaW5pc2hlZCB5ZXQuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudEtwaVNwYXJrbGluZSB7XG4gIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5O1xuICBwYXJ0aWFsOiBib29sZWFuO1xuICBwb2ludHM6IENvbXBvbmVudEtwaVNwYXJrbGluZVBvaW50W107XG59XG5cbi8vIEV2ZXJ5IG51bWJlciBhIEtQSSBjYXJkIHNob3dzIGJlc2lkZSBpdHMgdmFsdWUuIHNob3cgbmFtZXMgdGhlIGRlbHRhIHRvXG4vLyBwcmludCwgZGVjaWRlZCBieSB0aGUgc2VydmVyLiBXaGVuIHZhbHVlIGlzIG51bGwgdGhlIGNhcmQgc2hvd3MgYSBkYXNoIGFuZFxuLy8gbm8gY29tcGFyaXNvbi5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50S3BpIHtcbiAgdmFsdWU6IG51bWJlciB8IG51bGw7XG4gIHByaW9yOiBudW1iZXIgfCBudWxsO1xuICBjaGFuZ2U6IG51bWJlciB8IG51bGw7XG4gIHBlcmNlbnRDaGFuZ2U6IG51bWJlciB8IG51bGw7XG4gIHNob3c6IEtwaURlbHRhU2hvdztcbiAgbm90ZTogS3BpTm90ZUNvZGUgfCBudWxsO1xuICB0YXJnZXQ6IENvbXBvbmVudEtwaVRhcmdldCB8IG51bGw7XG4gIHNwYXJrbGluZTogQ29tcG9uZW50S3BpU3BhcmtsaW5lIHwgbnVsbDtcbn1cblxuLy8gQSBjb21wb25lbnQncyBDU1YgZXhwb3J0OiB0aGUgcHJlc2lnbmVkIGRvd25sb2FkIFVSTCwgcGx1cyBvbmUgc2VudGVuY2UgcGVyXG4vLyB3YXkgdGhlIGZpbGUgZmFsbHMgc2hvcnQgb2YgdGhlIGZ1bGwgcmVzdWx0IChjdXQgYXQgdGhlIGV4cG9ydCBjZWlsaW5nLCBvclxuLy8gY3V0IGFzIHRoZSBjaGFydCBpdHNlbGYgaXMpLiBFbXB0eSB3aGVuIHRoZSBmaWxlIGlzIGNvbXBsZXRlLiBPcHRpb25hbFxuLy8gYmVjYXVzZSBhIHNlcnZlciBvbiBhbiBvbGRlciBmcmFtZXdvcmsgYW5zd2VycyB3aXRoIHRoZSB1cmwgYWxvbmUuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudEV4cG9ydFJlc3BvbnNlIHtcbiAgdXJsOiBzdHJpbmc7XG4gIG5vdGVzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0TGlzdEl0ZW0ge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIG1vZGlmeURhdGU6IHN0cmluZztcbiAgc3RhdGU/OiBSZXBvcnRTdGF0ZTtcbiAgLy8gVGhlIGZvbGRlciB0aGUgcmVwb3J0IGlzIGZpbGVkIHVuZGVyLiBudWxsIGlzIGEgcmVhbCwgY29tbW9uIHZhbHVlIOKAlCB0aGVcbiAgLy8gcmVwb3J0IHNpdHMgYXQgdGhlIHJvb3Qgb2YgdGhlIGxpc3RpbmcgdHJlZSBhbG9uZ3NpZGUgdGhlIGZvbGRlcnMuXG4gIC8vXG4gIC8vIE9wdGlvbmFsIGxpa2UgYHN0YXRlYCBiZXNpZGUgaXQ6IHRoZSBiYWNrZW5kIGFsd2F5cyBzZW5kcyBpdCwgYnV0IG1ha2luZyBpdFxuICAvLyByZXF1aXJlZCBpcyBhIGJyZWFraW5nIHR5cGUgY2hhbmdlIGZvciBldmVyeSBjb25zdW1lciBob2xkaW5nIGFcbiAgLy8gUmVwb3J0TGlzdEl0ZW0gbGl0ZXJhbCAoZml4dHVyZXMsIG1vY2tzKSBhbmQgYnV5cyBub3RoaW5nIOKAlCB0aGUgbGlzdGluZ1xuICAvLyByZWFkcyBpdCBhcyBgPz8gbnVsbGAgZWl0aGVyIHdheS5cbiAgcmVwb3J0Rm9sZGVySWQ/OiBudW1iZXIgfCBudWxsO1xufVxuXG4vLyBPbmUgZm9sZGVyIGluIHRoZSBsaXN0aW5nIHRyZWUg4oCUIGFuIGF1ZGllbmNlIGJ1Y2tldCAoXCJNYW5hZ2VtZW50XCIsXG4vLyBcIk9wZXJhdGlvbnNcIikgcmVwb3J0cyBhcmUgZmlsZWQgaW50by4gRm9sZGVycyBuZXN0IHZpYSBwYXJlbnRSZXBvcnRGb2xkZXJJZDtcbi8vIHJlcG9ydHMgbmV2ZXIgZG8sIHNvIHRoZSB0cmVlJ3Mgb25seSBicmFuY2ggbm9kZXMgYXJlIGZvbGRlcnMuXG4vL1xuLy8gYHN0YXRlYCBpcyB0aGUgZm9sZGVyJ3MgT1dOIHN0YXRlLiBEZWxldGluZyBhIGZvbGRlciB3cml0ZXMgb25seSB0aGF0LCBhbmRcbi8vIGV2ZXJ5dGhpbmcgYmVsb3cgaXQgY291bnRzIGFzIGRlbGV0ZWQgYnkgcG9zaXRpb24g4oCUIHNlZSBSZXBvcnROb2RlLmRlbGV0ZWQuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEZvbGRlciB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgcGFyZW50UmVwb3J0Rm9sZGVySWQ6IG51bWJlciB8IG51bGw7XG4gIHN0YXRlPzogUmVwb3J0U3RhdGU7XG59XG5cbi8vIEdFVCAvYXBpL3JlcG9ydHMgcmV0dXJucyBib3RoIGhhbHZlcyBmbGF0OyB0aGUgbGlzdGluZyBuZXN0cyB0aGVtIGl0c2VsZi5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0VHJlZSB7XG4gIHJlcG9ydHM6IFJlcG9ydExpc3RJdGVtW107XG4gIGZvbGRlcnM6IFJlcG9ydEZvbGRlcltdO1xufVxuXG5leHBvcnQgZW51bSBSZXBvcnROb2RlVHlwZSB7XG4gIEZvbGRlciA9ICdmb2xkZXInLFxuICBSZXBvcnQgPSAncmVwb3J0Jyxcbn1cblxuLy8gT25lIG5vZGUgYXMgZnMtdHJlZSBzZWVzIGl0LiBGb2xkZXJzIGFuZCByZXBvcnRzIHNoYXJlIG9uZSBpZCBzcGFjZSBpbiB0aGVcbi8vIHZpZXcsIHNvIHRoZSBpZHMgYXJlIHByZWZpeGVkICgnZjoxMicgLyAncjozNCcpIOKAlCBgaWRgIGlzIHRoZSBvcmlnaW5hbCxcbi8vIHBlci10YWJsZSBpZCB0aGF0IHRoZSBBUEkgZW5kcG9pbnRzIHRha2UuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydE5vZGUge1xuICBrZXk6IHN0cmluZztcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBSZXBvcnROb2RlVHlwZTtcbiAgLy8gT25seSBldmVyIHBvcHVsYXRlZCBvbiBhIGZvbGRlcjsgYSByZXBvcnQgaXMgYWx3YXlzIGEgbGVhZi5cbiAgY2hpbGRyZW46IFJlcG9ydE5vZGVbXTtcbiAgLy8gUHJlc2VudCBvbiByZXBvcnQgbm9kZXMgb25seS5cbiAgcmVwb3J0PzogUmVwb3J0TGlzdEl0ZW07XG4gIC8vIFRoZSBub2RlJ3Mgb3duIHJvdyBpcyBkZWxldGVkLiBXaGF0IGVhcm5zIHRoZSBcIkRlbGV0ZWRcIiBjaGlwIOKAlCB0aGlzIGlzXG4gIC8vIHdoYXQgc29tZWJvZHkgYWN0dWFsbHkgZGVsZXRlZC5cbiAgc3RhdGVEZWxldGVkOiBib29sZWFuO1xuICAvLyBEZWxldGVkIGl0c2VsZiBPUiBhbnl3aGVyZSBiZWxvdyBhIGRlbGV0ZWQgZm9sZGVyLiBPbmx5IGV2ZXIgdHJ1ZSBpbiBTaG93XG4gIC8vIERlbGV0ZWQgbW9kZSAodGhlIGRlZmF1bHQgbGlzdGluZyBuZXZlciByZXR1cm5zIHN1Y2ggYSBub2RlKSwgYW5kIGl0IGlzIHdoYXRcbiAgLy8gc3dhcHMgdGhlIHJvdydzIGFjdGlvbnMgZm9yIFJlc3RvcmUuXG4gIGRlbGV0ZWQ6IGJvb2xlYW47XG59XG5cbi8vIFJlcG9ydHMgYW5kIGZvbGRlcnMgYXJlIGJvdGggc29mdC1kZWxldGFibGUuIEEgZGVsZXRlZCByZXBvcnQga2VlcHMgaXRzIHBhZ2VzXG4vLyBhbmQgY29tcG9uZW50czsgYSBkZWxldGVkIGZvbGRlciBrZWVwcyBldmVyeXRoaW5nIGZpbGVkIHVuZGVyIGl0LCB3aGljaCBsZWF2ZXNcbi8vIHRoZSBsaXN0aW5nIHdpdGggaXQgYW5kIGNvbWVzIGJhY2sgd2l0aCBpdC4gXCJTaG93IERlbGV0ZWRcIiBzaG93cyB0aGUgd2hvbGVcbi8vIHRyZWUsIGxpdmUgYW5kIGRlbGV0ZWQgdG9nZXRoZXIsIHNvIGFueSBvZiBpdCBjYW4gYmUgcmVzdG9yZWQgaW4gcGxhY2UuXG5leHBvcnQgZW51bSBSZXBvcnRTdGF0ZSB7XG4gIEFjdGl2ZSA9ICdhY3RpdmUnLFxuICBEZWxldGVkID0gJ2RlbGV0ZWQnLFxufVxuXG4vLyBUaGUgY2hhdCB0dXJuIGZsYWdzIHRoaXMgY29udGV4dCdzIGJhY2tlbmQgYWRkcyAoUmVwb3J0c1xcQWlWaWV3KS5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Q2hhdFJlc3BvbnNlIHtcbiAgcmVwb3J0Q2hhbmdlZD86IGJvb2xlYW47XG4gIHJlcG9ydFJlbmFtZWQ/OiBib29sZWFuO1xufVxuXG4vLyBPbmUgdmVyc2lvbiBvZiB0aGUgZ2xvYmFsIEFJIGtub3dsZWRnZSBkb2N1bWVudCDigJQgdGhlIG9wZXJhdG9yLWF1dGhvcmVkXG4vLyBtYXJrZG93biBhcHBlbmRlZCB0byB0aGUgcmVwb3J0IGFnZW50J3Mgc3lzdGVtIGluc3RydWN0aW9ucyBvbiBldmVyeSB0dXJuLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRJbnN0cnVjdGlvbiB7XG4gIGlkOiBudW1iZXI7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgY3VycmVudDogYm9vbGVhbjtcbiAgY3JlYXRlRGF0ZTogRGF0ZTtcbiAgbW9kaWZ5RGF0ZTogRGF0ZTtcbiAgYWNjb3VudElkOiBudW1iZXIgfCBudWxsO1xuICBhY2NvdW50TmFtZTogc3RyaW5nIHwgbnVsbDtcbn1cblxuLy8gR0VUL1BVVCBpbnN0cnVjdGlvbnMgcGF5bG9hZDogdGhlIGN1cnJlbnQgdmVyc2lvbiAobnVsbCB1bnRpbCBvbmUgaXNcbi8vIGF1dGhvcmVkKSBwbHVzIHRoZSBmdWxsIGhpc3RvcnksIG5ld2VzdCBmaXJzdC5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0SW5zdHJ1Y3Rpb25zIHtcbiAgaW5zdHJ1Y3Rpb25zOiBSZXBvcnRJbnN0cnVjdGlvbiB8IG51bGw7XG4gIHZlcnNpb25zOiBSZXBvcnRJbnN0cnVjdGlvbltdO1xufVxuXG4vLyBUaGUgbGF0ZXN0IHNlbWFudGljLWRhdGFiYXNlIGJ1aWxkIChhbiBmZl9wcm9jZXNzZXMgcm93KSDigJQgZW5vdWdoIGZvciB0aGVcbi8vIHNldHRpbmdzIGRpYWxvZyB0byBzYXkgd2hhdCBzdGF0ZSB0aGUgYnVpbGQgaXMgaW4gYW5kIHdoZW4gaXQgbGFzdCByYW4uXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGQge1xuICBpZDogbnVtYmVyO1xuICBzdGF0ZTogc3RyaW5nO1xuICBwZXJjZW50OiBudW1iZXIgfCBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgZHVyYXRpb246IG51bWJlcjtcbiAgY3JlYXRlRGF0ZTogRGF0ZTtcbiAgc3RhcnREYXRlOiBEYXRlO1xuICBlbmREYXRlOiBEYXRlO1xufVxuXG4vLyBBIGJ1aWxkIHN0YWdlJ3Mgc3RhdGUgb24gdGhlIGVudGl0eSBzY29yZWJvYXJkOiAnZG9uZScgPSBidWlsdCwgJ21pc3NpbmcnID1cbi8vIHN0aWxsIG5lZWRzIGJ1aWxkaW5nIChhIG1pc3Npbmcgc3RhZ2UgaXMgdW5idWlsdCBjb250ZW50LCBuZXZlciBhbiBlcnJvcikuXG5leHBvcnQgdHlwZSBTZW1hbnRpY0J1aWxkU3RhZ2UgPSAnZG9uZScgfCAnbWlzc2luZyc7XG5cbi8vIE9uZSBlbnVtIGNvbHVtbiBvZiBhbiBlbnRpdHksIHdpdGggdGhlIGFsbG93ZWQgdmFsdWVzIHRoZSBidWlsZCBpbmxpbmVkLlxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0J1aWxkRW51bSB7XG4gIGNvbHVtbjogc3RyaW5nO1xuICB2YWx1ZXM6IHN0cmluZ1tdO1xufVxuXG4vLyBPbmUgZW50aXR5IHJvdyBvZiB0aGUgc2NvcmVib2FyZCAoYW4gZW50aXR5ID0gYSB0YWJsZSArIGEgbW9kZWwgKyBhXG4vLyBoYW5kbGVyKTogaXRzIHRhYmxlL3NoYXBlIGNvdW50cywgaW5saW5lZCBlbnVtIHZhbHVlcywgY29tcHV0ZWQgZmllbGRzLCBob3dcbi8vIG1hbnkgY29kZSBmdW5jdGlvbnMgd2VyZSBjYWNoZWQgKHNwbGl0IG1vZGVsIHZzIGhhbmRsZXIpLCBhbmQgdGhlIHBlci1zdGFnZVxuLy8gYnVpbHQvbWlzc2luZyBzdGF0ZS5cbi8vXG4vLyBgbW9kZWxgL2BoYW5kbGVyYCBhcmUgdGhlIGNsYXNzZXMgdGhlIGZ1bmN0aW9ucyB3ZXJlIHJlYWQgZnJvbSDigJQgd2hhdCBhXG4vLyByZWFkZXIgcmVjb2duaXplcyB0aGUgcm93IGJ5LCB3aGVyZSBga2V5YCBpcyB3aGF0IHRoZSByZXBvcnQgQUkgYWRkcmVzc2VzIGl0XG4vLyBieSBpbiBkZXNjcmliZV9lbnRpdHkgLyBjb21waWxlX3F1ZXJ5LlxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0J1aWxkRW50aXR5IHtcbiAga2V5OiBzdHJpbmc7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIG1vZGVsOiBzdHJpbmcgfCBudWxsO1xuICBoYW5kbGVyOiBzdHJpbmcgfCBudWxsO1xuICBjb2x1bW5zOiBudW1iZXI7XG4gIHJlbGF0aW9uc2hpcHM6IG51bWJlcjtcbiAgZW51bXM6IFNlbWFudGljQnVpbGRFbnVtW107XG4gIGNvbXB1dGVkRmllbGRzOiBzdHJpbmdbXTtcbiAgZnVuY3Rpb25Db3VudDogbnVtYmVyO1xuICBtb2RlbEZ1bmN0aW9uQ291bnQ6IG51bWJlcjtcbiAgaGFuZGxlckZ1bmN0aW9uQ291bnQ6IG51bWJlcjtcbiAgc3RhZ2VzOiBSZWNvcmQ8c3RyaW5nLCBTZW1hbnRpY0J1aWxkU3RhZ2U+O1xufVxuXG4vLyBPbmUgc3RhbmRhbG9uZSBjb2RlIGNsYXNzIHRoZSBidWlsZCByZWFkOiBkb21haW4gbG9naWMgd2l0aCBubyB0YWJsZSBvZiBpdHNcbi8vIG93biAoYSBzdW1tYXJ5IG1vZGVsLCBhIGNhbGN1bGF0aW9uIHNlcnZpY2UpLiBUaGUgcmVwb3J0IEFJIHJlYWRzIGl0cyBjb2RlXG4vLyBleGFjdGx5IGxpa2UgYW4gZW50aXR5J3MsIGJ1dCBpdCBjYW4gbmV2ZXIgYmUgcXVlcmllZCDigJQgdGhlcmUgaXMgbm90aGluZyB0b1xuLy8gc2VsZWN0IGZyb20g4oCUIHNvIGl0IGNhcnJpZXMgbm8gdGFibGUsIGNvbHVtbnMgb3IgcmVsYXRpb25zaGlwcy5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZENsYXNzIHtcbiAga2V5OiBzdHJpbmc7XG4gIG1vZGVsOiBzdHJpbmcgfCBudWxsO1xuICBmdW5jdGlvbkNvdW50OiBudW1iZXI7XG59XG5cbi8vIFdoYXQgdGhlIGJ1aWxkIGRlY2lkZWQgYSBwaHlzaWNhbCB0YWJsZSBpcy4gRW50aXR5IGFuZCBqdW5jdGlvbiBhcmUgYm90aFxuLy8gcmVhY2hhYmxlIGJ5IHRoZSByZXBvcnQgQUkg4oCUIGFuIGVudGl0eSBkaXJlY3RseSwgYSBqdW5jdGlvbiB0aHJvdWdoIHRoZVxuLy8gbWFueS10by1tYW55IGl0IGJyaWRnZXMuIEV4Y2x1ZGVkIGlzIG5vdCByZWFjaGFibGUgYXQgYWxsLlxuZXhwb3J0IHR5cGUgU2VtYW50aWNUYWJsZUNsYXNzaWZpY2F0aW9uID0gJ2VudGl0eScgfCAnanVuY3Rpb24nIHwgJ2V4Y2x1ZGVkJztcblxuLy8gT25lIHBoeXNpY2FsIHRhYmxlIGFzIHRoZSBidWlsZCBjbGFzc2lmaWVkIGl0LiBgcmVhc29uYCBhbnN3ZXJzIGEgc2luZ2xlXG4vLyBxdWVzdGlvbiDigJQgd2h5IGNhbid0IHRoZSByZXBvcnQgQUkgc2VlIHRoaXMgdGFibGU/IOKAlCBhbmQgaXMgbnVsbCB3aGVuIGl0IGNhbi5cbi8vIEEganVuY3Rpb24gd2l0aCBhIHJlYXNvbiBicmlkZ2VkIG5vdGhpbmcsIHNvIGl0IGlzIGp1c3QgYXMgaW52aXNpYmxlIGFzIGFuXG4vLyBleGNsdWRlZCB0YWJsZS5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZFRhYmxlIHtcbiAgdGFibGU6IHN0cmluZztcbiAgY2xhc3NpZmljYXRpb246IFNlbWFudGljVGFibGVDbGFzc2lmaWNhdGlvbjtcbiAgbW9kZWw6IHN0cmluZyB8IG51bGw7XG4gIHJlYXNvbjogc3RyaW5nIHwgbnVsbDtcbn1cblxuLy8gVGhlIGJ1aWxkIHNjb3JlYm9hcmQgc2hpcHBlZCBhbG9uZ3NpZGUgdGhlIGJ1aWxkIHN0YXR1czogdGhlIHN1bW1hcnkgY291bnRzLFxuLy8gdGhlIGZ1bGwgYnJlYWtkb3duIHRoZSBzZXR0aW5ncyBkaWFsb2cgZHJpbGxzIGludG8g4oCUIEJPVEgga2luZHMgb2YgdW5pdCB0aGVcbi8vIGJ1aWxkIGNhY2hlcywgdGFibGUtYmFja2VkIGVudGl0aWVzIGFuZCBzdGFuZGFsb25lIGNvZGUgY2xhc3NlcyDigJQgYW5kIHRoZVxuLy8gY2F0YWxvZyBvZiBldmVyeSB0YWJsZSB0aGUgYnVpbGQgc2F3LCBzbyB0aGUgdGFiIGNhbiBzaG93IHdoYXQgdGhlIHJlcG9ydCBBSVxuLy8gY2FuJ3Qgc2VlLCBub3QganVzdCB3aGF0IGl0IGNhbi5cbi8vXG4vLyBgZnVuY3Rpb25Db3VudGAgc3BhbnMgZW50aXRpZXMgYW5kIGNsYXNzZXMgYWxpa2U6IGl0IGlzIHRoZSBzYW1lIHRvdGFsIHRoZVxuLy8gYnVpbGQgaXRzZWxmIHJlcG9ydHMgd2hlbiBpdCBmaW5pc2hlcy5cbi8vXG4vLyBgdGFibGVzYCBpcyBlbXB0eSBmb3IgYW4gYXJ0aWZhY3QgYnVpbHQgYmVmb3JlIHRoZSBjYXRhbG9nIGV4aXN0ZWQuIFJlYWQgdGhhdFxuLy8gYXMgXCJubyBjYXRhbG9nXCIsIG5ldmVyIGFzIFwibm90aGluZyB3YXMgZXhjbHVkZWRcIi5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZERldGFpbCB7XG4gIC8vIFdoZXRoZXIgdGhlIGFydGlmYWN0IHdhcyBwcm9kdWNlZCBieSBhIGJ1aWxkIHRoYXQgcmFuIHRvIHRoZSBlbmQuIFJlYWQgaXRcbiAgLy8gYmVzaWRlIGBnZW5lcmF0ZWRBdGAsIG5ldmVyIGluc3RlYWQgb2YgaXQ6IHRoZSBzdHJ1Y3R1cmFsIGFydGlmYWN0IGlzXG4gIC8vIHB1Ymxpc2hlZCBCRUZPUkUgdGhlIEFJIGZ1bmN0aW9uIHBhc3MsIHNvIGEgYnVpbGQgd2hvc2UgQUkgcGFzcyBmYWlsZWQgc3RpbGxcbiAgLy8gY2FycmllcyBhIGRhdGUgYW5kIGEgZnVsbCBzZXQgb2YgY291bnRzLiBUaGUgZGF0ZSBzYXlzIHNvbWV0aGluZyB3YXNcbiAgLy8gd3JpdHRlbjsgb25seSB0aGlzIHNheXMgdGhlIGJ1aWxkIGZpbmlzaGVkIHdyaXRpbmcgaXQuXG4gIGNvbXBsZXRlOiBib29sZWFuO1xuICBnZW5lcmF0ZWRBdDogRGF0ZSB8IG51bGw7XG4gIGVudGl0eUNvdW50OiBudW1iZXI7XG4gIGNsYXNzQ291bnQ6IG51bWJlcjtcbiAgZnVuY3Rpb25Db3VudDogbnVtYmVyO1xuICBlbnRpdGllczogU2VtYW50aWNCdWlsZEVudGl0eVtdO1xuICBjbGFzc2VzOiBTZW1hbnRpY0J1aWxkQ2xhc3NbXTtcbiAgdGFibGVDb3VudDogbnVtYmVyO1xuICBqdW5jdGlvbkNvdW50OiBudW1iZXI7XG4gIHVubGlua2VkSnVuY3Rpb25Db3VudDogbnVtYmVyO1xuICBleGNsdWRlZENvdW50OiBudW1iZXI7XG4gIHRhYmxlczogU2VtYW50aWNCdWlsZFRhYmxlW107XG59XG5cbi8vIFdoaWNoIGNsYXNzIGEgY2FjaGVkIGZ1bmN0aW9uIHdhcyByZWFkIGZyb20uIEFuIGVudGl0eSdzIGNhY2hlIHNwbGl0cyBpbnRvXG4vLyAnbW9kZWwnIGFuZCAnaGFuZGxlcic7IGEgc3RhbmRhbG9uZSBjb2RlIGNsYXNzIGhhcyBvbmUgZ3JvdXAsICdjbGFzcycuXG5leHBvcnQgdHlwZSBTZW1hbnRpY0Z1bmN0aW9uU291cmNlID0gJ21vZGVsJyB8ICdoYW5kbGVyJyB8ICdjbGFzcyc7XG5cbi8vIE9uZSBBSS1jbGFzc2lmaWVkIGNvZGUgZnVuY3Rpb24gZnJvbSBhIG1vZGVsLCBoYW5kbGVyIG9yIHN0YW5kYWxvbmUgY2xhc3M6XG4vLyB3aGF0IGtpbmQgb2YgbG9naWMgaXQgaXMsIHdoYXQgaXQgZG9lcywgYW5kIHdoYXQgaXQgcHJvZHVjZXMg4oCUIHRoZSBidWlsZCdzXG4vLyBjYWNoZWQgXCJ3aGF0IHRoZSBjb2RlIGRvZXNcIiBrbm93bGVkZ2Ugc2hvd24gaW4gdGhlIGZ1bmN0aW9ucyBkaWFsb2cuXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljRW50aXR5RnVuY3Rpb24ge1xuICBjbGFzczogc3RyaW5nO1xuICBtZXRob2Q6IHN0cmluZztcbiAgc2lnbmF0dXJlOiBzdHJpbmc7XG4gIGtpbmQ6IHN0cmluZztcbiAgc3VtbWFyeTogc3RyaW5nO1xuICBwcm9kdWNlczogc3RyaW5nO1xuICBzb3VyY2U6IFNlbWFudGljRnVuY3Rpb25Tb3VyY2U7XG59XG5cbi8vIE9uZSBlbnRpdHkncyBjYWNoZWQgY29kZS1mdW5jdGlvbiBrbm93bGVkZ2UsIGZldGNoZWQgd2hlbiBhIGZ1bmN0aW9ucyBkaWFsb2dcbi8vIG9wZW5zICh0aGUgZnVsbCBzZXQgYWNyb3NzIGFsbCBlbnRpdGllcyBpcyB0b28gYmlnIHRvIHNoaXAgd2l0aCB0aGVcbi8vIHNjb3JlYm9hcmQpLiBPbmUgcGF5bG9hZCBzZXJ2ZXMgYm90aCBkaWFsb2dzIOKAlCBjb25zdW1lcnMgZmlsdGVyIGJ5IHNvdXJjZS5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNFbnRpdHlGdW5jdGlvbnMge1xuICBlbnRpdHk6IHN0cmluZztcbiAgZ2VuZXJhdGVkQXQ6IERhdGUgfCBudWxsO1xuICBtb2RlbENsYXNzOiBzdHJpbmcgfCBudWxsO1xuICBoYW5kbGVyQ2xhc3M6IHN0cmluZyB8IG51bGw7XG4gIGZ1bmN0aW9uczogU2VtYW50aWNFbnRpdHlGdW5jdGlvbltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGRTdGF0dXMge1xuICBidWlsZDogU2VtYW50aWNCdWlsZCB8IG51bGw7XG4gIGRldGFpbDogU2VtYW50aWNCdWlsZERldGFpbDtcbn1cblxuLy8gVGhlIHJlcG9ydCBtb2R1bGUncyBHZW5lcmFsIHNldHRpbmdzIChhIHNtYWxsIGdsb2JhbCBrZXkvdmFsdWUgc3RvcmUsIHRoZVxuLy8gcmVwb3J0aW5nIGNvdW50ZXJwYXJ0IG9mIHRoZSBhcHAtd2lkZSBzZXR0aW5ncykuIEVhY2ggdmFsdWUgc2hpcHMgd2l0aCB0aGVcbi8vIHNhZmUgYmFuZCBpdHMgZWRpdG9yIGZpZWxkIGlzIGJvdW5kZWQgdG8uXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFNldHRpbmdzIHtcbiAgLy8gSG93IG1hbnkgc3VtbWFyeSBjYWxscyB0aGUgc2VtYW50aWMgYnVpbGQgcnVucyBhdCBvbmNlLlxuICBzZW1hbnRpY0J1aWxkQ29uY3VycmVuY3k6IG51bWJlcjtcbiAgc2VtYW50aWNCdWlsZENvbmN1cnJlbmN5TWluOiBudW1iZXI7XG4gIHNlbWFudGljQnVpbGRDb25jdXJyZW5jeU1heDogbnVtYmVyO1xufVxuIl19
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkVBQTZFO0FBQzdFLG1FQUFtRTtBQUNuRSwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLG1DQUFtQztBQTJUbkMsNEVBQTRFO0FBQzVFLDJFQUEyRTtBQUMzRSx1REFBdUQ7QUFDdkQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWdEO0lBQzlFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO0lBQzdCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0lBQy9CLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0lBQ2pDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO0lBQ3JDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0NBQ3BDLENBQUM7QUFtdEJGLE1BQU0sQ0FBTixJQUFZLGNBR1g7QUFIRCxXQUFZLGNBQWM7SUFDeEIsbUNBQWlCLENBQUE7SUFDakIsbUNBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUhXLGNBQWMsS0FBZCxjQUFjLFFBR3pCO0FBdUJELGdGQUFnRjtBQUNoRixpRkFBaUY7QUFDakYsNkVBQTZFO0FBQzdFLDBFQUEwRTtBQUMxRSxNQUFNLENBQU4sSUFBWSxXQUdYO0FBSEQsV0FBWSxXQUFXO0lBQ3JCLGdDQUFpQixDQUFBO0lBQ2pCLGtDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFIVyxXQUFXLEtBQVgsV0FBVyxRQUd0QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSBhc3NlbWJsZWQgcmVwb3J0IHN0cnVjdHVyZSByZXR1cm5lZCBieSBHRVQgL2FwaS9yZXBvcnRzLzppZCDigJQgY29tcG9zZWRcbi8vIHNlcnZlci1zaWRlIGZyb20gdGhlIG5vcm1hbGl6ZWQgdGFibGVzIChyZXBvcnRzIOKGkiByZXBvcnRfcGFnZXMg4oaSXG4vLyByZXBvcnRfY29tcG9uZW50cyArIHJlcG9ydF9maWx0ZXJzLCBwbHVzIHJlcG9ydF9maWx0ZXJfZ3JvdXBzKS4gQWxsIGtleXMgYXJlXG4vLyBjYW1lbENhc2U7IGNvbXBvbmVudCBgY29uZmlnYCBpcyB0aGUgc3RhbmRhcmQgZm9ybWF0IHRoZSByZW5kZXJlciBtYXBzIHRvXG4vLyBFQ2hhcnRzIG9wdGlvbnMgLyBGc0xpc3QgY29uZmlnLlxuXG5pbXBvcnQgeyBHcmlkTGF5b3V0IH0gZnJvbSAnQGZpcmVzdGl0Y2gvZ3JpZCc7XG5cbmltcG9ydCB7IFJlcG9ydENoYW5nZVBvbGFyaXR5IH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWNoYW5nZS1wb2xhcml0eS5lbnVtJztcbmltcG9ydCB7IFJlcG9ydENoYXJ0Q29sb3IgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtY2hhcnQtY29sb3IuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRDaGFydERhdGFMYWJlbHMgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtY2hhcnQtZGF0YS1sYWJlbHMuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRDaGFydERhdGVMYWJlbCB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1jaGFydC1kYXRlLWxhYmVsLmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0Q2hhcnRMaW5lU3R5bGUgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtY2hhcnQtbGluZS1zdHlsZS5lbnVtJztcbmltcG9ydCB7IFJlcG9ydENoYXJ0TWFya1N0YXQgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtY2hhcnQtbWFyay1zdGF0LmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0TGlzdENvbHVtbkZvcm1hdCB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1saXN0LWNvbHVtbi1mb3JtYXQuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnROdW1iZXJVbml0cyB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1udW1iZXItdW5pdHMuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRWYWx1ZUZvcm1hdCB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC12YWx1ZS1mb3JtYXQuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRWYWx1ZUZvcm11bGEgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtdmFsdWUtZm9ybXVsYS5lbnVtJztcblxuaW1wb3J0IHsgQ29tcG9uZW50RGF0YUFwcGxpZWQgfSBmcm9tICcuL2NvbXBvbmVudC1kYXRhLWFwcGxpZWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbXBvbmVudERhdGFEcmlsbCB9IGZyb20gJy4vY29tcG9uZW50LWRhdGEtZHJpbGwuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcG9ydERyaWxsU3RlcCB9IGZyb20gJy4vcmVwb3J0LWRyaWxsLXN0ZXAuaW50ZXJmYWNlJztcbmltcG9ydCB7IEdyaWRDb25maWcgfSBmcm9tICcuL3JlcG9ydC1ncmlkLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0Vmlld2VyRmVhdHVyZSB9IGZyb20gJy4vcmVwb3J0LXZpZXdlci1mZWF0dXJlLnR5cGUnO1xuXG4vLyBBIEJDUCA0NyBsYW5ndWFnZSB0YWcgbmFtaW5nIGhvdyBudW1iZXJzIGFuZCBkYXRlcyBhcmUgd3JpdHRlbiwgZS5nLiAnZnItQ0EnLlxuLy8gVGhlIHNldCBpcyBvcGVuICh0aGUgc2VydmVyJ3MgcHJvdmlkZXIgZGVjaWRlcyB3aGljaCBpdCBvZmZlcnMpLCBzbyB0aGlzIGlzIGFcbi8vIG5hbWVkIGFsaWFzIHJhdGhlciB0aGFuIGEgdW5pb24uXG5leHBvcnQgdHlwZSBSZXBvcnRMb2NhbGVUYWcgPSBzdHJpbmc7XG5cbi8vIEFuIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUsIGUuZy4gJ0NBRCcuIE9wZW4gZm9yIHRoZSBzYW1lIHJlYXNvbi5cbmV4cG9ydCB0eXBlIFJlcG9ydEN1cnJlbmN5Q29kZSA9IHN0cmluZztcblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnQge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIC8vIFRoZSByZXBvcnQncyBvd24gc3RvcmVkIElBTkEgem9uZSAoZS5nLiBBbWVyaWNhL05ld19Zb3JrKS4gbnVsbCA9IHRoZVxuICAvLyByZXBvcnQgZm9sbG93cyB0aGUgYXBwbGljYXRpb24ncyBkZWZhdWx0IHJlcG9ydGluZyB6b25lLlxuICB0aW1lem9uZTogc3RyaW5nIHwgbnVsbDtcbiAgLy8gVGhlIHpvbmUgZXZlcnkgZGF0ZSBmaWx0ZXIsIHRpbWUgYnVja2V0IGFuZCBkYXRlIGNlbGwgb2YgdGhpcyByZXBvcnQgdXNlcy5cbiAgLy8gUmVzb2x2ZWQgc2VydmVyLXNpZGU7IHRoZSBzYW1lIGZvciBldmVyeSB2aWV3ZXIsIGV4cG9ydCBhbmQgdGhlIGFzc2lzdGFudC5cbiAgLy8gT3B0aW9uYWwgb25seSBiZWNhdXNlIG9sZGVyIHNlcnZlcnMgb21pdCBpdDsgcmVzb2x2ZVJlcG9ydFRpbWV6b25lKCkgdGhlblxuICAvLyBmYWxscyBiYWNrIHRvIHRoZSByZXBvcnQncyBvd24gYHRpbWV6b25lYCwgdGhlbiB0aGUgYnJvd3NlcidzIHpvbmUuIFJlc29sdmVcbiAgLy8gdGhlIHpvbmUgZm9yIHJlbmRlcmluZyB0aHJvdWdoIHJlc29sdmVSZXBvcnRUaW1lem9uZSgpIChmb3JtYXQudHMpOyByZWFkIHRoZVxuICAvLyBmaWVsZCBkaXJlY3RseSBvbmx5IHRvIGNoZWNrIHdoZXRoZXIgdGhlIHNlcnZlciBzZW50IGl0LlxuICBlZmZlY3RpdmVUaW1lem9uZT86IHN0cmluZztcbiAgLy8gVGhlIHJlcG9ydCdzIG93biBzdG9yZWQgbG9jYWxlLiBudWxsID0gdGhlIHJlcG9ydCBmb2xsb3dzIHRoZSBkZWZhdWx0LlxuICBsb2NhbGU/OiBSZXBvcnRMb2NhbGVUYWcgfCBudWxsO1xuICAvLyBUaGUgbG9jYWxlIGV2ZXJ5IG51bWJlciBhbmQgZGF0ZSBvZiB0aGlzIHJlcG9ydCBpcyB3cml0dGVuIGluLCByZXNvbHZlZFxuICAvLyBzZXJ2ZXItc2lkZSAodGhlIHJlcG9ydCdzIG93biwgZWxzZSB0aGUgYXBwbGljYXRpb24ncyBkZWZhdWx0LCBlbHNlXG4gIC8vIGVuLVVTKS4gQWJzZW50IG9uIG9sZGVyIHNlcnZlcnMsIHdob3NlIHJlcG9ydHMgdGhlbiByZWFkIGVuLVVTLiBSZXNvbHZlIGl0XG4gIC8vIGZvciByZW5kZXJpbmcgdGhyb3VnaCByZXNvbHZlRm9ybWF0Q29udGV4dCgpIChmb3JtYXQudHMpLCBuZXZlciBkaXJlY3RseS5cbiAgZWZmZWN0aXZlTG9jYWxlPzogUmVwb3J0TG9jYWxlVGFnO1xuICAvLyBUaGUgcmVwb3J0J3Mgb3duIHN0b3JlZCBjdXJyZW5jeS4gbnVsbCA9IHRoZSByZXBvcnQgZm9sbG93cyB0aGUgZGVmYXVsdC5cbiAgY3VycmVuY3k/OiBSZXBvcnRDdXJyZW5jeUNvZGUgfCBudWxsO1xuICAvLyBUaGUgY3VycmVuY3kgbW9uZXkgYW1vdW50cyBhcmUgbGFiZWxlZCBpbiwgcmVzb2x2ZWQgbGlrZSBlZmZlY3RpdmVMb2NhbGVcbiAgLy8gKGZhbGxpbmcgYmFjayB0byB0aGUgbG9jYWxlJ3Mgb3duIGN1cnJlbmN5LCB0aGVuIFVTRCkuIEEgbGFiZWwgb25seTpcbiAgLy8gYW1vdW50cyBhcmUgbmV2ZXIgY29udmVydGVkLlxuICBlZmZlY3RpdmVDdXJyZW5jeT86IFJlcG9ydEN1cnJlbmN5Q29kZTtcbiAgLy8gSG93IHRoZSBzZXJ2ZXIgc2VuZHMgYSBwZXJjZW50IG1lYXN1cmU6ICdyYXRpbycgPSBhIDAtMSByYXRpbyAoMC4zODUgcmVhZHNcbiAgLy8gMzguNSUpLiBBYnNlbnQgb24gb2xkZXIgc2VydmVycywgd2hvc2UgcGVyY2VudCB2YWx1ZXMgYXJlIGFscmVhZHkgeDEwMFxuICAvLyAoMzguNSByZWFkcyAzOC41JSkuXG4gIHBlcmNlbnRGb3JtYXQ/OiAncmF0aW8nO1xuICAvLyBSZXBvcnQtbGV2ZWwgY29uZmlnOiB0eXBvZ3JhcGhpYyBzdHlsZXMsIGV0Yy4gKGNhbWVsQ2FzZSBKU09OIGNvbHVtbikuXG4gIGNvbmZpZzogUmVwb3J0Q29uZmlnO1xuICAvLyBUaGUgcGFnZSBpbiBJTkNIRVMgKHRoZSByZXBvcnQncyBuYXRpdmUgdW5pdCDigJQgUERGcyBhbmQgUG93ZXJQb2ludCBhcmVcbiAgLy8gaW5jaC1iYXNlZCwgc28gZXhwb3J0cyBhcmUgZGltZW5zaW9uYWxseSBleGFjdCkuIE9yaWVudGF0aW9uIGlzIG5vdCBhIGZpZWxkXG4gIC8vIG9mIGl0cyBvd246IGEgcGFnZSB3aWRlciB0aGFuIGl0IGlzIHRhbGwgSVMgbGFuZHNjYXBlLlxuICBwYWdlV2lkdGg6IG51bWJlcjtcbiAgcGFnZUhlaWdodDogbnVtYmVyO1xuICBwYWdlczogUmVwb3J0UGFnZVtdO1xuICAvLyBUaGUgaGVhZGVyIGFuZCBmb290ZXI6IHRoZSByZXBvcnQncyBtYXN0ZXIgcGFnZSwgd2hvc2UgY29tcG9uZW50cyBkcmF3XG4gIC8vIHVuZGVyIGV2ZXJ5IHBhZ2UgdGhhdCBkb2VzIG5vdCBoaWRlIHRoZW0gKFBvd2VyUG9pbnQncyBzbGlkZSBtYXN0ZXIpLiBOdWxsXG4gIC8vIHVudGlsIGFueXRoaW5nIGhhcyBiZWVuIHBsYWNlZCBpbiB0aGVtLlxuICBtYXN0ZXI6IFJlcG9ydE1hc3RlciB8IG51bGw7XG4gIGZpbHRlckdyb3VwczogUmVwb3J0RmlsdGVyR3JvdXBbXTtcbiAgLy8gVGhlIHZpZXdlciBmZWF0dXJlcyB0aGlzIHNlcnZlciBzZXJ2ZXMgZm9yIHRoZSByZXBvcnQuIFRoZSB2aWV3ZXIgb2ZmZXJzXG4gIC8vIGEgY29udHJvbCBvbmx5IHdoZW4gaXRzIGZlYXR1cmUgaXMgbGlzdGVkLiBBYnNlbnQgb24gb2xkZXIgc2VydmVycywgd2hpY2hcbiAgLy8gc2VydmUgbm9uZS5cbiAgdmlld2VyRmVhdHVyZXM/OiBSZXBvcnRWaWV3ZXJGZWF0dXJlW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0TWFzdGVyIHtcbiAgaWQ6IG51bWJlcjtcbiAgY29tcG9uZW50czogUmVwb3J0Q29tcG9uZW50W107XG4gIC8vIFRoZSB2YWx1ZXMgdGhlIGhlYWRlciBhbmQgZm9vdGVyIHRleHQgc2hvd3MsIGFzIFJlcG9ydFBhZ2UudmFsdWVzLlxuICB2YWx1ZXM/OiBSZXBvcnRDb21wb25lbnRbXTtcbn1cblxuLy8gSG93IHRoZSBvcGVuIHJlcG9ydCB3cml0ZXMgaXRzIG51bWJlcnMgYW5kIGRhdGVzLCByZXNvbHZlZCBvbmNlIHBlciByZXBvcnRcbi8vIChyZXNvbHZlRm9ybWF0Q29udGV4dCkgYW5kIHJlYWQgYnkgdGhlIHZpZXdlciwgdGhlIFBERiBhbmQgUG93ZXJQb2ludCBhbGlrZS5cbi8vIE5ldmVyIHRoZSBicm93c2VyJ3MgbG9jYWxlLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRGb3JtYXRDb250ZXh0IHtcbiAgbG9jYWxlOiBSZXBvcnRMb2NhbGVUYWc7XG4gIGN1cnJlbmN5OiBSZXBvcnRDdXJyZW5jeUNvZGU7XG4gIC8vIFdoZXRoZXIgYSBwZXJjZW50IG1lYXN1cmUgYXJyaXZlcyBhcyBhIDAtMSByYXRpbyAodGhlIHJlcG9ydCdzXG4gIC8vIHBlcmNlbnRGb3JtYXQpLiBBbiBvbGRlciBzZXJ2ZXIgc2VuZHMgaXQgYWxyZWFkeSB4MTAwLlxuICByYXRpb1BlcmNlbnQ6IGJvb2xlYW47XG59XG5cbi8vIE9uZSBsb2NhbGUgdGhlIHNlcnZlciBvZmZlcnMsIHdpdGggdGhlIGN1cnJlbmN5IGEgcmVwb3J0IGluIGl0IHVzZXMgd2hlbiBpdFxuLy8gbmFtZXMgbm9uZSBvZiBpdHMgb3duLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRMb2NhbGVPcHRpb24ge1xuICBsb2NhbGU6IFJlcG9ydExvY2FsZVRhZztcbiAgZGVmYXVsdEN1cnJlbmN5OiBSZXBvcnRDdXJyZW5jeUNvZGU7XG59XG5cbi8vIEdFVCByZXBvcnRzL2xvY2FsZXM6IHdoYXQgdGhlIHJlcG9ydCBzZXR0aW5ncycgTG9jYWxlIGFuZCBDdXJyZW5jeSBzZWxlY3RzXG4vLyBvZmZlci5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0TG9jYWxlcyB7XG4gIGRlZmF1bHRMb2NhbGU6IFJlcG9ydExvY2FsZVRhZztcbiAgb3B0aW9uczogUmVwb3J0TG9jYWxlT3B0aW9uW107XG4gIGN1cnJlbmNpZXM6IFJlcG9ydEN1cnJlbmN5Q29kZVtdO1xufVxuXG4vLyBUaGUgZGVwdGggb2YgdGhlIGhlYWRlciBiYW5kICh0b3Agb2YgZXZlcnkgcGFnZSkgYW5kIHRoZSBmb290ZXIgYmFuZCAoYm90dG9tXG4vLyBvZiBldmVyeSBwYWdlKSwgaW4gSU5DSEVTLiBUaGUgYmFuZHMgaG9sZCBubyBjb250ZW50IG9mIHRoZWlyIG93biDigJQgdGhlXG4vLyBtYXN0ZXIncyBjb21wb25lbnRzIHNpdCBpbiB0aGVtIOKAlCB0aGV5IGFyZSB0aGUgcmVzZXJ2ZWQgbWFyZ2lucyB0aGUgZWRpdG9yXG4vLyBkcmF3cyBhcyBndWlkZXMgYW5kIHNuYXBzIHRvLiBBbHdheXMgYXJyaXZlcyByZXNvbHZlZCAoMCA9IG5vIGJhbmQpLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRIZWFkZXJGb290ZXIge1xuICBoZWFkZXJIZWlnaHQ6IG51bWJlcjtcbiAgZm9vdGVySGVpZ2h0OiBudW1iZXI7XG59XG5cbi8vIFJlcG9ydC1sZXZlbCBzdHlsaW5nLiBTaXplcyBhcmUgaW4gUE9JTlRTICgxLzcyXCIpIOKAlCB0aGUgcmVwb3J0J3MgdHlwb2dyYXBoeVxuLy8gbWFwcyAxOjEgdG8gUERGICg3MnB0L2luKSBhbmQgUG93ZXJQb2ludCAocG9pbnQgZm9udCBzaXplcyksIHNvIGEgcG9pbnRcbi8vIHZhbHVlIGlzIGRpbWVuc2lvbmFsbHkgZXhhY3Qgb24gc2NyZWVuIGFuZCBpbiBldmVyeSBleHBvcnQuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydENvbmZpZyB7XG4gIHN0eWxlcz86IFJlcG9ydFN0eWxlcztcbiAgLy8gVGhlIHJlcG9ydCdzIGdyb3VwLWJ5IGNvbnRyb2wuIE9wdGlvbmFsIG9uIHRoZSB0eXBlIGJlY2F1c2UgYSBSZXBvcnRDb25maWdcbiAgLy8gbGl0ZXJhbCBuZWVkIG5vdCBjYXJyeSBpdDsgdGhlIEFQSSBhbHdheXMgc2VuZHMgaXQsIHJlc29sdmVkLlxuICBncm91cEJ5PzogUmVwb3J0R3JvdXBCeTtcbiAgLy8gUmVzb2x2ZWQgYnkgdGhlIEFQSSBsaWtlIGdyb3VwQnkuXG4gIGhlYWRlckZvb3Rlcj86IFJlcG9ydEhlYWRlckZvb3Rlcjtcbn1cblxuLy8gVGhlIHJlcG9ydCdzIGdyb3VwLWJ5IGNvbnRyb2wg4oCUIHRoZSBvbmUgc3dpdGNoIHRoYXQgcmUtYnVja2V0cyBldmVyeVxuLy8gdGltZS1zZXJpZXMgY2hhcnQgYW5kIGV2ZXJ5IHRhYmxlIHRoYXQgZm9sbG93cyBpdCAoZm9sbG93c0dyb3VwQnkpIG9uIHRoZVxuLy8gcmVwb3J0IGJldHdlZW4gZGF5LCB3ZWVrLCBtb250aCwgcXVhcnRlciBhbmQgeWVhci5cbi8vXG4vLyBJdCBpcyBOT1QgYSBmaWx0ZXI6IGEgZmlsdGVyIG5hcnJvd3Mgd2hpY2ggcm93cyBhcmUgY291bnRlZCwgdGhpcyBjaGFuZ2VzIGhvd1xuLy8gdGhlIHN1cnZpdmluZyByb3dzIGFyZSBidWNrZXRlZC4gSXQgc2hhcmVzIHRoZSByZXBvcnQncyBmaWx0ZXIgYmFyIGJlY2F1c2Vcbi8vIHRoYXQgaXMgdGhlIG9uZSByb3cgb2YgY29udHJvbHMgYSB2aWV3ZXIgcmVhZHMgYSByZXBvcnQgdGhyb3VnaCDigJQgdGhlXG4vLyBzZXBhcmF0aW9uIHRoYXQgbWF0dGVycyBpcyBpbiB0aGUgbW9kZWwsIG5vdCBpbiB3aGVyZSB0aGUgY29udHJvbCBpcyBwYWludGVkLlxuLy9cbi8vIEFsd2F5cyBhcnJpdmVzIFJFU09MVkVEICh0aGUgYmFja2VuZCBmaWxscyBhbiBhYnNlbnQgb3IgcGFydGlhbCBzdG9yZWQgYmxvY2tcbi8vIGluIGZyb20gaXRzIG93biBkZWZhdWx0cyksIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGVmYXVsdCBoZXJlIOKAlCByZW5kZXIgd2hhdFxuLy8geW91IGFyZSBnaXZlbi5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0R3JvdXBCeSB7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGdyYW51bGFyaXRpZXM6IENoYXJ0R3JhbnVsYXJpdHlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRTdHlsZXMge1xuICBoZWFkaW5nPzogeyBzaXplPzogbnVtYmVyIH07XG59XG5cbi8vIENvbnRlbnQgcGFkZGluZyBhcm91bmQgYSBjb21wb25lbnQncyBib2R5LCBpbiBJTkNIRVMgKHRoZSBnZW9tZXRyeSB1bml0KS5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50UGFkZGluZyB7XG4gIHRvcD86IG51bWJlcjtcbiAgcmlnaHQ/OiBudW1iZXI7XG4gIGJvdHRvbT86IG51bWJlcjtcbiAgbGVmdD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRQYWdlIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgb3JkZXI6IG51bWJlcjtcbiAgLy8gVGhlIHBhZ2Ugb3B0cyBvdXQgb2YgdGhlIHJlcG9ydCdzIGhlYWRlciBhbmQgZm9vdGVyIChhIHRpdGxlIHBhZ2UpLlxuICBtYXN0ZXJIaWRkZW46IGJvb2xlYW47XG4gIGNvbXBvbmVudHM6IFJlcG9ydENvbXBvbmVudFtdO1xuICAvLyBFdmVyeSBhY3RpdmUgdmFsdWUgb2YgdGhlIHBhZ2UsIGluIGlkIG9yZGVyOiB0aG9zZSBpdHMgdGV4dCBzaG93cyBhbmRcbiAgLy8gdGhvc2Ugbm8gdGV4dCBzaG93cyBhbnkgbW9yZSAoa2VwdCB1bnRpbCBhIHRleHQsIHZhbHVlIG9yIHBhZ2UgZGVsZXRlLCBzb1xuICAvLyBhIGNoaXAgcGFzdGVkIGJhY2sgc3RpbGwgbmFtZXMgb25lKS4gTmV2ZXIgZHJhd24sIGFuZCBuZXZlciBpblxuICAvLyBgY29tcG9uZW50c2AuIE9wdGlvbmFsIGJlY2F1c2Ugb2xkZXIgc2VydmVycyBvbWl0IGl0LlxuICB2YWx1ZXM/OiBSZXBvcnRDb21wb25lbnRbXTtcbn1cblxuLy8gJ3RleHQnIGlzIGF1dGhvcmVkIHJpY2ggdGV4dCB3aXRoIG5vIHF1ZXJ5IGJlaGluZCBpdCDigJQgaXQgbmV2ZXIgZmV0Y2hlcyBkYXRhLlxuLy8gJ3ZhbHVlJyBpcyBvbmUgbnVtYmVyIHNob3duIGluc2lkZSBhIHRleHQgYmxvY2sncyB3b3JkcyAoe3t2YWx1ZS5rZXl9fSk7IGl0XG4vLyBoYXMgYSBxdWVyeSBidXQgbm8gcGxhY2Ugb2YgaXRzIG93biBvbiB0aGUgcGFnZS4gJ2dyaWQnIGlzIGEgdGFibGUgZHJhd24gYnlcbi8vIGZzLWdyaWQsIHdoaWNoIHJlYWRzIGl0cyBvd24gcm93cyB0aHJvdWdoIFJlcG9ydEdyaWRTb3VyY2UuXG5leHBvcnQgdHlwZSBSZXBvcnRDb21wb25lbnRUeXBlID0gJ2NoYXJ0JyB8ICdsaXN0JyB8ICdncmlkJyB8ICdrcGknIHwgJ3RleHQnIHwgJ3ZhbHVlJztcblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRDb21wb25lbnQge1xuICBpZDogbnVtYmVyO1xuICB0eXBlOiBSZXBvcnRDb21wb25lbnRUeXBlO1xuICB0aXRsZTogc3RyaW5nIHwgbnVsbDtcbiAgLy8gR2VvbWV0cnkgaW4gSU5DSEVTOiBhYnNvbHV0ZSBwb3NpdGlvbiBvbiB0aGUgcGFnZSBjYW52YXMuXG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICB3OiBudW1iZXI7XG4gIGg6IG51bWJlcjtcbiAgLy8gSGVpZ2h0IG1vZGUsIERFUklWRUQgZnJvbSB0eXBlIHNlcnZlci1zaWRlIChub3Qgc3RvcmVkLCByZWFkLW9ubHkpOiBsaXN0c1xuICAvLyBhbmQgS1BJIHRpbGVzIGFyZSBhdXRvICh0aGUgYm94IHNpemVzIHRvIGl0cyBjb250ZW50LCBgaGAgaWdub3JlZCk7IGNoYXJ0c1xuICAvLyBhcmUgYWx3YXlzIGZpeGVkICh1c2UgYGhgKSBzbyB0aGV5IGZpdCB0aGUgYm94IGFuZCBuZXZlciBvdmVyZmxvdy5cbiAgYXV0b0hlaWdodDogYm9vbGVhbjtcbiAgLy8gVGhlIHN0b3JlZCBTUUwgb2YgYSBsZWdhY3kgc3FsLW1vZGUgY29tcG9uZW50LiBOVUxMIGZvciBhIGRlcml2ZWQgb25lLFxuICAvLyB3aG9zZSBzdGF0ZW1lbnQgZG9lcyBub3QgZXhpc3QgdW50aWwgaXRzIGRvY3VtZW50IGlzIGNvbXBpbGVkIOKAlCB0aGUgU1FMIHRhYlxuICAvLyBmZXRjaGVzIHRoYXQgc2VwYXJhdGVseSAoc2VlIFJlcG9ydENvbXBvbmVudFNxbCkuXG4gIHNxbDogc3RyaW5nIHwgbnVsbDtcbiAgY29uZmlnOiBDaGFydENvbmZpZyAmIExpc3RDb25maWcgJiBHcmlkQ29uZmlnICYgS3BpQ29uZmlnICYgVGV4dENvbmZpZyAmIFZhbHVlQ29uZmlnICYgQ29tcG9uZW50TGF5b3V0Q29uZmlnXG4gICAgJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZmlsdGVyczogUmVwb3J0RmlsdGVyW107XG4gIC8vIFRoZSBmaWVsZCB0aGUgcmVwb3J0J3MgZ3JvdXAtYnkgcmUtYnVja2V0cyBvbiB0aGlzIHRpbGUsIG5hbWVkIGJ5IHRoZVxuICAvLyBzZXJ2ZXI7IG51bGwgb24gYSB0aWxlIHRoYXQga2VlcHMgaXRzIG93biBncmFpbi4gQWJzZW50IGZyb20gYSBzZXJ2ZXIgdGhhdFxuICAvLyBwcmVkYXRlcyB0YWJsZXMgZm9sbG93aW5nIHRoZSBncm91cC1ieSAoZm9sbG93c0dyb3VwQnkoKSkuXG4gIGZvbGxvd3NHcm91cEJ5PzogUmVwb3J0R3JvdXBCeUZpZWxkIHwgbnVsbDtcbn1cblxuLy8gVGhlIGZpZWxkIHRoZSByZXBvcnQncyBncm91cC1ieSByZS1idWNrZXRzIG9uIGEgdGlsZSDigJQgYSB0aW1lLXNlcmllc1xuLy8gY2hhcnQncyB4LWF4aXMsIGEgdGFibGUncyB0aW1lIGF4aXMgYXMgaXRzIGZpZWxkcyBuYW1lIGl0IOKAlCBhbmQgdGhlIGdyYWluXG4vLyB0aGUgdGlsZSBpcyBhdXRob3JlZCBhdCwgd2hpY2ggaXQgcmVhZHMgYXQgd2hpbGUgdGhlIGdyb3VwLWJ5IHBpY2tzIG5vbmUuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEdyb3VwQnlGaWVsZCB7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbDtcbn1cblxuLy8gV2hhdCB0aGUgU1FMIHRhYiBmZXRjaGVzOiB0aGUgc3RhdGVtZW50IGEgY29tcG9uZW50IHJ1bnMuXG4vL1xuLy8gRm9yIGEgZGVyaXZlZCBjb21wb25lbnQgYGJhc2VsaW5lYCBpcyB0cnVlIGFuZCBgc3FsYCBpcyB3aGF0IGl0cyBkb2N1bWVudFxuLy8gY29tcGlsZXMgdG8gd2l0aCBOTyB2aWV3ZXIgc3RhdGUg4oCUIG5vIGZpbHRlcnMsIHRoZSBhdXRob3JlZCBncmFpbi4gVGhlXG4vLyBudW1iZXJzIG9uIHNjcmVlbiBjb21lIGZyb20gdGhhdCBzdGF0ZW1lbnQgcGx1cyB3aGF0ZXZlciB0aGUgdmlld2VyIHBpY2tlZCxcbi8vIHNvIHRoZSB0d28gY2FuIGxlZ2l0aW1hdGVseSBkaWZmZXIgYW5kIHRoZSB0YWIgc2F5cyBzbyByYXRoZXIgdGhhbiBpbXBseWluZ1xuLy8gdGhleSBtYXRjaC5cbi8vXG4vLyBgdGltZXpvbmVgIGlzIHRoZSBJQU5BIHpvbmUgdGhlIHN0YXRlbWVudCB3YXMgY29tcGlsZWQgaW46IHRoZSByZXBvcnQnc1xuLy8gZWZmZWN0aXZlIHpvbmUuIE9wdGlvbmFsIGJlY2F1c2Ugb2xkZXIgc2VydmVycyBvbWl0IGl0OyB0aGV5IGNvbXBpbGVkIGluIFVUQy5cbi8vXG4vLyBgZXJyb3JgIGlzIG5vdCBhIGZhaWx1cmUgb2YgdGhlIHJlcXVlc3Q6IGEgZG9jdW1lbnQgdGhhdCBubyBsb25nZXIgY29tcGlsZXNcbi8vIGlzIHByZWNpc2VseSB3aGF0IHNvbWVvbmUgb3BlbnMgdGhpcyB0YWIgdG8gZGlzY292ZXIsIHNvIGl0IGFycml2ZXMgYXMgYVxuLy8gbWVzc2FnZSB0byByZW5kZXIgd2l0aCBgZXJyb3JUeXBlYCBuYW1pbmcgd2hpY2gga2luZCAoJ3N0YWxlLXF1ZXJ5JyBvclxuLy8gJ3NlbnNpdGl2ZS1jb2x1bW4nKSwgYW5kIGBzcWxgIG51bGwuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydENvbXBvbmVudFNxbCB7XG4gIHNxbDogc3RyaW5nIHwgbnVsbDtcbiAgb3JpZ2luOiAnc3FsJyB8ICdkYnEnIHwgJ2Rlcml2ZWQnO1xuICBiYXNlbGluZTogYm9vbGVhbjtcbiAgdGltZXpvbmU/OiBzdHJpbmc7XG4gIGVycm9yOiBzdHJpbmcgfCBudWxsO1xuICBlcnJvclR5cGU6IHN0cmluZyB8IG51bGw7XG59XG5cbi8vIEEgdGV4dCBibG9jaydzIGNvbnRlbnQ6IGFuIGh0bWwgZnJhZ21lbnQgdGhlIHNlcnZlciBoYXMgYWxyZWFkeSByZWJ1aWx0IGZyb21cbi8vIGFuIGFsbG93bGlzdCwgd2hpY2ggbWF5IGNhcnJ5IHt7cGFnZS5udW1iZXJ9fSwge3twYWdlLm5hbWV9fSBhbmRcbi8vIHt7cmVwb3J0Lm5hbWV9fSB0b2tlbnMgKHNlZSB0ZXh0LnRzKS5cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dENvbmZpZyB7XG4gIGh0bWw/OiBzdHJpbmc7XG59XG5cbi8vIEEgdmFsdWUncyBrZXk6IHdoYXQgaXRzIHRva2VuIGluIGEgdGV4dCBibG9jaydzIGh0bWwgbmFtZXMsIHVuaXF1ZSB3aXRoaW5cbi8vIHRoZSBwYWdlLiBJdHMgbnVtYmVyIGlzIGZvcm1hdHRlZCBieSBjb25maWcubWVhc3VyZSAoS3BpQ29uZmlnKSwgYXMgb24gYSBLUEkuXG4vLyBBIGZvcm11bGEgdmFsdWUgaGFzIG5vIHF1ZXJ5OiBgZm9ybXVsYWAgbmFtZXMgd2hhdCBpdCB3b3JrcyBvdXQgb2YgdGhlXG4vLyBwYWdlJ3MgcXVlcnkgdmFsdWVzLCBhbmQgaXRzIG1lYXN1cmUgaG9sZHMgb25seSB0aGUgZm9ybWF0IGtleXMgaXRzIGF1dGhvclxuLy8gZ2F2ZSAoZm9ybWF0LCBwcmVjaXNpb24sIHVuaXRzKS5cbmV4cG9ydCBpbnRlcmZhY2UgVmFsdWVDb25maWcge1xuICBrZXk/OiBzdHJpbmc7XG4gIGZvcm11bGE/OiBWYWx1ZUZvcm11bGFDb25maWcgfCBudWxsO1xufVxuXG4vLyBBIGZvcm11bGEgdmFsdWUncyBvcGVyYXRpb24gYW5kIG9wZXJhbmRzOiBgb2ZgIG5hbWVzIHF1ZXJ5IHZhbHVlcyBvbiB0aGVcbi8vIHNhbWUgcGFnZSAodGhlIG1hc3RlciBmb3IgYSBoZWFkZXIgb3IgZm9vdGVyKSBieSBrZXksIDIgb2YgdGhlbSwgb3IgMiB0byAxMFxuLy8gZm9yIGEgc3VtLiBgc2lnbmVkYCBhYnNlbnQgcmVhZHMgdHJ1ZSBmb3IgYSBjaGFuZ2UgYW5kIGEgcGVyY2VudCBjaGFuZ2UsXG4vLyBmYWxzZSBmb3IgYSByYXRpbyBhbmQgYSBzdW0uXG5leHBvcnQgaW50ZXJmYWNlIFZhbHVlRm9ybXVsYUNvbmZpZyB7XG4gIG9wOiBSZXBvcnRWYWx1ZUZvcm11bGE7XG4gIG9mOiBzdHJpbmdbXTtcbiAgc2lnbmVkPzogYm9vbGVhbiB8IG51bGw7XG59XG5cbi8vIE9uZSByb3cgb2YgUE9TVCBwYWdlcy86aWQvdmFsdWVzOiBhIHZhbHVlJ3MgbnVtYmVyIGZvciB0aGUgZmlsdGVycyBzZW50LlxuLy8gVGhlcmUgaXMgb25lIHJvdyBwZXIgdmFsdWUgdGhlIGxheWVyIHJlYWRzLCBpbiBpZCBvcmRlcjogb25lIHNvbWUgdGV4dCBvblxuLy8gdGhhdCBwYWdlIHNob3dzLCBvciBhbiBvcGVyYW5kIG9mIGEgZm9ybXVsYSBzb21lIHRleHQgc2hvd3MuIGB2YWx1ZWAgaXNcbi8vIHJhdywgYXMgdGhlIHF1ZXJ5IHJldHVybmVkIGl0IG9yIHRoZSBzZXJ2ZXIgd29ya2VkIGl0IG91dCAobnVsbCB3aGVuIHRoZXJlXG4vLyBpcyBubyByb3cgb3IgdGhlIHJlc3VsdCBpcyBudWxsKTsgZm9ybWF0dGluZyBpcyB0aGUgdmlld2VyJ3MsIHRocm91Z2ggdGhlXG4vLyB2YWx1ZSdzIG1lYXN1cmUuIGBlcnJvcmAgaXMgdGhhdCB2YWx1ZSdzIG93biBmYWlsdXJlLCBhbmQgdGhlIHBhZ2UncyBvdGhlclxuLy8gdmFsdWVzIGFyZSByZWFkIHJlZ2FyZGxlc3MuXG4vLyBgcm9sZWAgaXMgdGhlIGNvbXBhcmlzb24gcm9sZSB0aGUgbnVtYmVyIHBsYXlzOiBhIHF1ZXJ5IHZhbHVlJ3MgY29tcGFyaXNvblxuLy8gb3V0cHV0J3MsIGNoYW5nZSBvciBwZXJjZW50X2NoYW5nZSBmb3IgdGhvc2UgZm9ybXVsYXMsIGVsc2UgbnVsbC5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0UGFnZVZhbHVlIHtcbiAgaWQ6IG51bWJlcjtcbiAga2V5OiBzdHJpbmc7XG4gIHZhbHVlOiBudW1iZXIgfCBzdHJpbmcgfCBudWxsO1xuICBlcnJvcjogc3RyaW5nIHwgbnVsbDtcbiAgcm9sZT86IE91dHB1dFJvbGUgfCBudWxsO1xufVxuXG4vLyBDcm9zcy10eXBlIGxheW91dC9zdHlsZSBrZXlzIGNhcnJpZWQgaW4gYSBjb21wb25lbnQncyBjb25maWcgKGFsb25nc2lkZSB0aGVcbi8vIHR5cGUtc3BlY2lmaWMgY2hhcnQvbGlzdC9rcGkga2V5cykuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudExheW91dENvbmZpZyB7XG4gIHBhZGRpbmc/OiBDb21wb25lbnRQYWRkaW5nO1xufVxuXG4vLyBUaGUgcHJlc2VudGF0aW9uIHNldHRpbmdzIGEgY29tcG9uZW50J3Mgc2V0dGluZ3MgZGlhbG9nIGVkaXRzLiBUaXRsZSBhbmRcbi8vIHBhZGRpbmcgYXJlIG5vdCBwYXJ0IG9mIHdoYXQgdGhlIGNvbXBvbmVudCBxdWVyaWVzLCBzbyBhIGNoYW5nZSB0byB0aGVtXG4vLyByZXBhaW50cyB3aXRob3V0IHJlLXJ1bm5pbmcgYW55dGhpbmcuIEEgZGVyaXZlZCBLUEkncyBjYXJkIGtleXMgYXJlIHNlbnRcbi8vIHRvbzogdGhlIHNlcnZlciBjb21wdXRlcyB0aGUgdGFyZ2V0J3MgcHJvZ3Jlc3MgYW5kIHRoZSBzcGFya2xpbmUncyBwb2ludHNcbi8vIHdpdGggdGhlIGRhdGEsIHNvIGEgY2hhbmdlIHRvIHRoZW0gcmVsb2FkcyBpdC5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50U2V0dGluZ3Mge1xuICB0aXRsZTogc3RyaW5nO1xuICBwYWRkaW5nOiBDb21wb25lbnRQYWRkaW5nO1xuICBrcGk/OiBLcGlDYXJkU2V0dGluZ3M7XG59XG5cbi8vIEEgS1BJJ3MgY2FyZCBrZXlzLiBUaGUgZGlhbG9nIHNlbmRzIHRoZW0gKG51bGwgcmVtb3ZlcyBhIGtleSwgaW5jcmVhc2VJc1xuLy8gbnVsbCByZWFkcyBnb29kKSwgYW5kIENvbXBvbmVudFNldHRpbmdzLmtwaSBjYXJyaWVzIHRoZW0gYXMgdGhlIHNlcnZlclxuLy8gc2F2ZWQgdGhlbSwgcmVhZCBiYWNrIGZyb20gdGhlIGNvbmZpZyBpdCByZXR1cm5zLlxuZXhwb3J0IGludGVyZmFjZSBLcGlDYXJkU2V0dGluZ3Mge1xuICBpbmNyZWFzZUlzOiBSZXBvcnRDaGFuZ2VQb2xhcml0eSB8IG51bGw7XG4gIHRhcmdldDogS3BpVGFyZ2V0Q29uZmlnIHwgbnVsbDtcbiAgc3BhcmtsaW5lOiBLcGlTcGFya2xpbmVDb25maWcgfCBudWxsO1xufVxuXG4vLyBXaGVyZSBhIGNoYXJ0J3MgbGVnZW5kIHNpdHMgcmVsYXRpdmUgdG8gdGhlIHBsb3QsIG9yICdoaWRkZW4nIHRvIGRyb3AgaXQuXG5leHBvcnQgdHlwZSBMZWdlbmRQb3NpdGlvbiA9ICd0b3AnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCAncmlnaHQnIHwgJ2hpZGRlbic7XG5cbmV4cG9ydCB0eXBlIENoYXJ0R3JhbnVsYXJpdHkgPSAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCcgfCAncXVhcnRlcicgfCAneWVhcic7XG5cbi8vIEhvdyBlYWNoIGdyYW51bGFyaXR5IHJlYWRzIGluIHRoZSBncm91cC1ieSBjb250cm9sIGFuZCBvbiBhbiBleHBvcnQgY292ZXJcbi8vIHNoZWV0LiBXSElDSCBvZiB0aGVtIGEgZ2l2ZW4gcmVwb3J0IG9mZmVycyBjb21lcyBmcm9tIGl0cyBSZXBvcnRHcm91cEJ5O1xuLy8gdGhpcyBpcyBvbmx5IHRoZSBuYW1pbmcuICd5ZWFyJyByZWFkcyBhcyBcIkFubnVhbGx5XCIuXG5leHBvcnQgY29uc3QgR1JBTlVMQVJJVFlfT1BUSU9OUzogeyB2YWx1ZTogQ2hhcnRHcmFudWxhcml0eTsgbmFtZTogc3RyaW5nIH1bXSA9IFtcbiAgeyB2YWx1ZTogJ2RheScsIG5hbWU6ICdEYXknIH0sXG4gIHsgdmFsdWU6ICd3ZWVrJywgbmFtZTogJ1dlZWsnIH0sXG4gIHsgdmFsdWU6ICdtb250aCcsIG5hbWU6ICdNb250aCcgfSxcbiAgeyB2YWx1ZTogJ3F1YXJ0ZXInLCBuYW1lOiAnUXVhcnRlcicgfSxcbiAgeyB2YWx1ZTogJ3llYXInLCBuYW1lOiAnQW5udWFsbHknIH0sXG5dO1xuXG4vLyBUaGUgY2hhcnQgdHlwZXMgdGhhdCBwbG90IHNlcmllcyBhZ2FpbnN0IGEgY2F0ZWdvcnkgYW5kIGEgdmFsdWUgYXhpcywgYW5kIHNvXG4vLyB0aGUgdHlwZXMgYSBtZWFzdXJlJ3Mgb3duIHNlcmllcyBjYW4gYmUgZHJhd24gYXMuIEEgd2F0ZXJmYWxsIGhhcyB0aGUgc2FtZVxuLy8gYXhlcyBidXQgaXMgbm90IG9uZSBvZiB0aGVtOiBpdCBkcmF3cyBpdHMgb25lIG1lYXN1cmUgYXMgZmxvYXRpbmcgc3RlcHMuXG5leHBvcnQgdHlwZSBBeGlzQ2hhcnRUeXBlID0gJ2JhcicgfCAnbGluZScgfCAnYXJlYSc7XG5cbi8vIFdoYXQgb25lIGJhciBvZiBhIHdhdGVyZmFsbCBkb2VzIHRvIHRoZSBydW5uaW5nIHRvdGFsIOKAlCBlYWNoIGlzIGRyYXduIGluIGl0c1xuLy8gb3duIGNvbG9yLiBUaGUgY2xvc2luZyB0b3RhbCBpcyB0aGUgbGFzdCBiYXIsIHN0YW5kaW5nIG9uIHplcm8uXG5leHBvcnQgdHlwZSBXYXRlcmZhbGxTdGVwS2luZCA9ICdyaXNlJyB8ICdmYWxsJyB8ICd0b3RhbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcnRDb25maWcge1xuICAvLyBBIHdhdGVyZmFsbCB0YWtlcyBPTkUgbWVhc3VyZSB3aG9zZSB2YWx1ZSBwZXIgY2F0ZWdvcnkgaXMgaG93IGZhciB0aGVcbiAgLy8gcnVubmluZyB0b3RhbCBtb3ZlcyB0aGVyZTogZWFjaCBiYXIgc3RhcnRzIHdoZXJlIHRoZSBvbmUgYmVmb3JlIGl0IGVuZGVkLFxuICAvLyBhbmQgYSBjbG9zaW5nIFRvdGFsIGJhciBzaG93cyB0aGUgc3VtLlxuICBjaGFydFR5cGU/OiBBeGlzQ2hhcnRUeXBlIHwgJ3dhdGVyZmFsbCcgfCAncGllJyB8ICdkb251dCc7XG4gIC8vIEZvciBraW5kICd0aW1lJywgdGhlIHNlcnZlciBidWNrZXRzIHRoZSByYXcgZGF0ZXRpbWUgY29sdW1uIHRvIGBncmFudWxhcml0eWBcbiAgLy8gaW4gdGhlIHJlcG9ydCdzIHRpbWV6b25lICh0aGUgU1FMIGV4cG9zZXMgdGhlIHJhdyBjb2x1bW4sIHVuYnVja2V0ZWQpLlxuICAvLyBkYXRlTGFiZWwgd3JpdGVzIGEgdGltZSBheGlzJ3MgcGVyaW9kIGxhYmVscyBzaG9ydCAoJ01heScsIHRoZSBkZWZhdWx0KSxcbiAgLy8gbG9uZyAoJ01heSAyMDI2Jykgb3IgbnVtZXJpYyAoJzIwMjYtMDUnKTsgYSBjYXRlZ29yeSBheGlzIGlnbm9yZXMgaXQuXG4gIHhBeGlzPzoge1xuICAgIGNvbHVtbjogc3RyaW5nO1xuICAgIGtpbmQ/OiAnY2F0ZWdvcnknIHwgJ3RpbWUnO1xuICAgIGdyYW51bGFyaXR5PzogQ2hhcnRHcmFudWxhcml0eTtcbiAgICBsYWJlbD86IHN0cmluZztcbiAgICBkYXRlTGFiZWw/OiBSZXBvcnRDaGFydERhdGVMYWJlbDtcbiAgfTtcbiAgbWVhc3VyZXM/OiBDaGFydE1lYXN1cmVbXTtcbiAgLy8gRWFjaCB2YWx1ZSBvZiB0aGlzIGNvbHVtbiBiZWNvbWVzIGl0cyBvd24gc2VyaWVzLiBJdCBjYXJyaWVzIG5vIGxhYmVsOiB0aGVcbiAgLy8gbGVnZW5kIG5hbWVzIHRoZSB2YWx1ZXMgdGhlbXNlbHZlcy5cbiAgc3BsaXRCeT86IHsgY29sdW1uOiBzdHJpbmcgfTtcbiAgLy8gU2luZ2xlLWRpbWVuc2lvbiBiYXIgY2hhcnRzIG9ubHk6IGNvbG9yIGVhY2ggYmFyIGJ5IGl0cyBvd24gY2F0ZWdvcnkgYW5kXG4gIC8vIHNob3cgYSBsZWdlbmQsIFdJVEhPVVQgc3BsaXR0aW5nIGludG8gbXVsdGlwbGUgc2VyaWVzICh3aGljaCBzbGl2ZXJzIHRoZVxuICAvLyBiYXJzKS4gdjEgZXhwZWN0cyBjb2xvckJ5LmNvbHVtbiA9PT0geEF4aXMuY29sdW1uLiBJZ25vcmVkIHdoZW4gc3BsaXRCeSBpc1xuICAvLyBzZXQgb3IgdGhlIGNoYXJ0IGlzbid0IGEgYmFyIGNoYXJ0LlxuICBjb2xvckJ5PzogeyBjb2x1bW46IHN0cmluZzsgbGFiZWw/OiBzdHJpbmcgfTtcbiAgb3JpZW50YXRpb24/OiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnO1xuICBzdGFja2VkPzogYm9vbGVhbjtcbiAgLy8gU3RhY2tzIHRoZSBwcmltYXJ5IGF4aXMncyBiYXIgYW5kIGFyZWEgc2VyaWVzIGFzIHNoYXJlcyBvZiBlYWNoXG4gIC8vIGNhdGVnb3J5J3MgdG90YWwsIHNvIGV2ZXJ5IHN0YWNrIHJlYWNoZXMgMTAwJS4gVGhlIHZpZXdlciBjb21wdXRlcyB0aGVcbiAgLy8gc2hhcmVzIGZyb20gdGhlIHJvd3MgaXQgcmVjZWl2ZXMsIGFmdGVyIHRoZSBmaWx0ZXJzIHJhbjsgdGhlIHJvd3MgYW5kIHRoZVxuICAvLyBDU1Yga2VlcCB0aGUgcmF3IHZhbHVlcy4gVGhlIHZhbHVlIGF4aXMgdGhlbiBhbHdheXMgcnVucyAwIHRvIDEwMCUgKGZyb21cbiAgLy8gLTEwMCUgd2hlbiBhIHNoYXJlIGlzIG5lZ2F0aXZlKS5cbiAgcGVyY2VudFN0YWNrZWQ/OiBib29sZWFuO1xuICAvLyBWYWx1ZXMgcHJpbnRlZCBiZXNpZGUgdGhlIHBvaW50cyBvZiBhIGJhciwgbGluZSBvciBhcmVhIHNlcmllczogZXZlcnlcbiAgLy8gcG9pbnQgKGFsbCksIGVhY2ggc2VyaWVzJyBsYXRlc3QgcG9pbnQgKGxhc3QpLCBvciBldmVyeSBwb2ludCB3aG9zZSBsYWJlbFxuICAvLyBmaXRzIHdpdGhvdXQgb3ZlcmxhcHBpbmcgYW5vdGhlciAoYXV0bykuIE9taXR0ZWQgb3Igbm9uZSwgbm8gbGFiZWxzLiBBXG4gIC8vIHBpZSwgYSBkb251dCBhbmQgYSB3YXRlcmZhbGwgbmV2ZXIgcHJpbnQgdGhlbS5cbiAgZGF0YUxhYmVscz86IFJlcG9ydENoYXJ0RGF0YUxhYmVscztcbiAgLy8gVGhlIHByaW1hcnkgdmFsdWUgYXhpcydzIHRpdGxlIGFuZCByYW5nZS4gRXZlcnkgc2VyaWVzIGlzIHBsb3R0ZWQgYWdhaW5zdFxuICAvLyBpdCB1bmxlc3MgaXRzIG1lYXN1cmUgaXMgc2Vjb25kYXJ5LlxuICB2YWx1ZUF4aXM/OiBDaGFydFZhbHVlQXhpcztcbiAgLy8gVGhlIHNlY29uZCB2YWx1ZSBheGlzLCBvbiB0aGUgcmlnaHQsIHRoYXQgc2Vjb25kYXJ5IG1lYXN1cmVzIHBsb3QgYWdhaW5zdC5cbiAgc2Vjb25kYXJ5QXhpcz86IENoYXJ0VmFsdWVBeGlzO1xuICAvLyBMYWJlbGVkIGxpbmVzIGFjcm9zcyB0aGUgcGxvdCBhdCBhIGNvbnN0YW50IHZhbHVlLCBvciBiYW5kcyBiZXR3ZWVuIHR3b1xuICAvLyB2YWx1ZXMsIGF0IG1vc3QgNS4gVmVydGljYWwgYXhpcyBjaGFydHMgYW5kIHdhdGVyZmFsbHMgb25seS5cbiAgcmVmZXJlbmNlcz86IENoYXJ0UmVmZXJlbmNlW107XG4gIGxlZ2VuZD86IExlZ2VuZFBvc2l0aW9uO1xuICBzb3J0PzogUmVwb3J0U29ydDtcbiAgbGltaXQ/OiBudW1iZXI7XG59XG5cbi8vIEEgdmFsdWUgYXhpcydzIHRpdGxlIGFuZCByYW5nZS4gRWFjaCBib3VuZCBsZWZ0IG91dCBpcyBwaWNrZWQgZnJvbSB0aGUgZGF0YSxcbi8vIGFuZCB0aGUgdGljayBzdGVwIHdpdGhvdXQgYW4gaW50ZXJ2YWwuIEl0cyB0aWNrcyB0YWtlIHRoZSBudW1iZXIgZm9ybWF0IG9mXG4vLyB0aGUgbWVhc3VyZXMgcGxvdHRlZCBhZ2FpbnN0IGl0LlxuZXhwb3J0IGludGVyZmFjZSBDaGFydFZhbHVlQXhpcyB7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBtaW4/OiBudW1iZXI7XG4gIG1heD86IG51bWJlcjtcbiAgaW50ZXJ2YWw/OiBudW1iZXI7XG59XG5cbi8vIEEgcmVmZXJlbmNlIGRyYXduIGFjcm9zcyBhIGNoYXJ0J3MgcGxvdDogYSBsaW5lIGF0IGB2YWx1ZWAsIG9yIHdpdGggYHRvYCBhXG4vLyBiYW5kIGJldHdlZW4gdGhlIHR3bywgbGFiZWxlZCB3aXRoIGBsYWJlbGAuIFRoZSB2YWx1ZSBpcyBvbmUgdGhlIHVzZXIgb3Jcbi8vIHRoZSBtb2RlbCBzdGF0ZXMsIG5ldmVyIG9uZSByZWFkIG9mZiB0aGUgZGF0YS4gc2Vjb25kYXJ5IHBsb3RzIGl0IGFnYWluc3Rcbi8vIHRoZSBzZWNvbmQgdmFsdWUgYXhpcywgd2hlbiB0aGUgY2hhcnQgaGFzIG9uZS5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcnRSZWZlcmVuY2Uge1xuICB2YWx1ZTogbnVtYmVyO1xuICBsYWJlbDogc3RyaW5nO1xuICB0bz86IG51bWJlcjtcbiAgc2Vjb25kYXJ5PzogYm9vbGVhbjtcbn1cblxuLy8gSG93IG9uZSBudW1lcmljIHNsb3QgaXMgc2hvd246IGEgY2hhcnQgbWVhc3VyZSwgYSBLUEkgbWVhc3VyZSwgYSBsaXN0IGNvbHVtblxuLy8gb3IgYSBjcm9zcy10YWIncyBjZWxscy4gVGhlIGRhdGEgc3RheXMgcmF3IChpdCBzb3J0cyBhbmQgZXhwb3J0cyBhcyBhXG4vLyBudW1iZXIpOyBvbmx5IHRoZSByZW5kZXJlcnMgZm9ybWF0IGl0LCB0aGUgc2FtZSB3YXkgb24gc2NyZWVuLCBpbiB0aGUgUERGXG4vLyBhbmQgaW4gUG93ZXJQb2ludCAoZm9ybWF0LnRzKS4gQWxsIHRocmVlIGtleXMgYXJlIG9wdGlvbmFsLCBhbmQgcHJlY2lzaW9uIG9yXG4vLyB1bml0cyB3aXRob3V0IGEgZm9ybWF0IG1lYW4gbnVtYmVyLlxuLy9cbi8vIEZvcm1hdHRpbmcgaXMgb3B0LWluOiBhIGxpc3QgY29sdW1uIG9yIGNyb3NzLXRhYiBjZWxsIHdpdGhvdXQgdGhlc2Uga2V5c1xuLy8gcHJpbnRzIGl0cyB2YWx1ZSBhcyBpdCBjYW1lLCBhbmQgYSBjaGFydCB3aXRob3V0IHRoZW0ga2VlcHMgaXRzIHBsYWluXG4vLyBsb2NhbGUtZ3JvdXBlZCBheGlzIGFuZCB0b29sdGlwcy4gQSBLUEkgd2l0aG91dCB0aGVtIHByaW50cyBhIHBsYWluIG51bWJlci5cbmV4cG9ydCBpbnRlcmZhY2UgTnVtYmVyRm9ybWF0U3BlYyB7XG4gIC8vIHBlcmNlbnQgdGFrZXMgYSAwLTEgcmF0aW8gKDAuMyByZWFkcyAzMCUpIHdoZW4gdGhlIHJlcG9ydCdzIHBlcmNlbnRGb3JtYXRcbiAgLy8gaXMgJ3JhdGlvJzsgYW4gb2xkZXIgc2VydmVyIGxlYXZlcyBpdCBvdXQgYW5kIHNlbmRzIHgxMDAuIGN1cnJlbmN5IGxhYmVsc1xuICAvLyB0aGUgYW1vdW50IGluIHRoZSByZXBvcnQncyBjdXJyZW5jeSwgd3JpdHRlbiBpbiBpdHMgbG9jYWxlLlxuICBmb3JtYXQ/OiBSZXBvcnRWYWx1ZUZvcm1hdCB8IFJlcG9ydExpc3RDb2x1bW5Gb3JtYXQ7XG4gIC8vIEhvdyBtYW55IGRlY2ltYWwgcGxhY2VzIHRoZSB2YWx1ZSBpcyBzaG93biB0byAoMC02KS4gRml4ZWQgcmF0aGVyIHRoYW5cbiAgLy8gbWF4aW11bTogYSBjb2x1bW4gb2YgcmF0ZXMgaXMgdW5yZWFkYWJsZSB3aGVuIGVhY2ggb25lIHNob3dzIGEgZGlmZmVyZW50XG4gIC8vIG51bWJlciBvZiBkZWNpbWFscy4gRm9yIHBlcmNlbnQgaXQgY291bnRzIHRoZSBkZWNpbWFscyBvZiB0aGUgcGVyY2VudGFnZVxuICAvLyAocHJlY2lzaW9uIDEgc2hvd3MgMC4zIGFzIDMwLjAlKS4gT21pdHRlZCBsZWF2ZXMgdGhlIGZvcm1hdCdzIG93biBkZWZhdWx0OlxuICAvLyBhdCBtb3N0IG9uZSBkZWNpbWFsIGZvciBwZXJjZW50IChhbmQgZm9yIGFuIGFiYnJldmlhdGVkIDEuMkspLCB3aG9sZSB1bml0c1xuICAvLyBmb3IgY3VycmVuY3ksIHRoZSBsb2NhbGUncyBkZWZhdWx0IGZvciBhIG51bWJlci5cbiAgLy9cbiAgLy8gSXQgY2Fubm90IGJlIGFwcGxpZWQgaW4gdGhlIFNRTDogdGhlIHZhbHVlIGlzIGFnZ3JlZ2F0ZWQgYWZ0ZXIgdGhlIHJlcG9ydCdzXG4gIC8vIGZpbHRlcnMgcnVuLCBzbyBwcmUtcm91bmRpbmcgd291bGQgYnJlYWsgbGl2ZSByZS1maWx0ZXJpbmcuXG4gIHByZWNpc2lvbj86IG51bWJlcjtcbiAgLy8gQWJicmV2aWF0ZXMgdG8gdGhvdXNhbmRzICgxLjJLKSBvciBtaWxsaW9ucyAoMy40TSksIG9yIHBpY2tzIGJ5IHNpemUuXG4gIHVuaXRzPzogUmVwb3J0TnVtYmVyVW5pdHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcnRNZWFzdXJlIGV4dGVuZHMgTnVtYmVyRm9ybWF0U3BlYyB7XG4gIGNvbHVtbjogc3RyaW5nO1xuICBhZ2dyZWdhdGlvbj86ICdzdW0nIHwgJ2NvdW50JyB8ICdhdmcnIHwgJ21pbicgfCAnbWF4JztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIC8vIERyYXdzIHRoaXMgbWVhc3VyZSdzIHNlcmllcyBhcyBhIGRpZmZlcmVudCB0eXBlIGZyb20gdGhlIGNoYXJ0J3Mgb3duXG4gIC8vIGNoYXJ0VHlwZSDigJQgY291bnRzIGFzIGJhcnMgd2l0aCBhIHJhdGUgYXMgYSBsaW5lIG92ZXIgdGhlbSBpcyBhIGNvbWJvXG4gIC8vIGNoYXJ0LiBPbWl0dGVkLCB0aGUgc2VyaWVzIHRha2VzIHRoZSBjaGFydCdzIHR5cGUuIEF4aXMgY2hhcnRzIG9ubHkgKGEgcGllXG4gIC8vIGlnbm9yZXMgaXQpLlxuICB0eXBlPzogQXhpc0NoYXJ0VHlwZTtcbiAgLy8gQSBjaGFydCBtZWFzdXJlJ3MgZm9ybWF0IHNob3dzIG9uIGl0cyB0b29sdGlwcywgYW5kIG9uIHRoZSB2YWx1ZSBheGlzXG4gIC8vIHdoZW4gZXZlcnkgbWVhc3VyZSBzaGFyaW5nIHRoZSBheGlzIGFncmVlcyBvbiBpdC4gQSBLUEkncyBtZWFzdXJlIGZvcm1hdHNcbiAgLy8gaXRzIG9uZSB2YWx1ZS5cbiAgZm9ybWF0PzogUmVwb3J0VmFsdWVGb3JtYXQ7XG4gIC8vIFBsb3RzIHRoaXMgbWVhc3VyZSBhZ2FpbnN0IHRoZSBzZWNvbmQgdmFsdWUgYXhpcywgb24gdGhlIHJpZ2h0LCBmb3IgYVxuICAvLyBxdWFudGl0eSBvbiBhbm90aGVyIHNjYWxlLiBPbWl0dGVkIG9yIGZhbHNlLCBpdCBzaGFyZXMgdGhlIHByaW1hcnkgYXhpcy5cbiAgLy8gQSB2ZXJ0aWNhbCBheGlzIGNoYXJ0IG9ubHksIHdpdGggYXQgbGVhc3Qgb25lIG1lYXN1cmUgbGVmdCBvbiB0aGUgcHJpbWFyeVxuICAvLyBheGlzLlxuICBzZWNvbmRhcnk/OiBib29sZWFuO1xuICAvLyBUaGUgcGFsZXR0ZSBjb2xvciB0aGlzIG1lYXN1cmUncyBzZXJpZXMgaXMgZHJhd24gaW4uIE9taXR0ZWQsIHRoZSBzZXJpZXNcbiAgLy8gdGFrZXMgdGhlIHBhbGV0dGUgY29sb3Igb2YgaXRzIHBvc2l0aW9uLiBBIGNvbG9yIG9uIHRoZSBmaXJzdCBtZWFzdXJlXG4gIC8vIHR1cm5zIG9mZiBhIGNhdGVnb3J5IGJhciBjaGFydCdzIGRlZmF1bHQgY29sb3IgcGVyIGJhciAoaXNDb2xvckJ5KS5cbiAgY29sb3I/OiBSZXBvcnRDaGFydENvbG9yO1xuICAvLyBIb3cgYSBsaW5lIHNlcmllcycgbGluZSBpcyBkcmF3bi4gT21pdHRlZCwgc29saWQuXG4gIGxpbmU/OiBSZXBvcnRDaGFydExpbmVTdHlsZTtcbiAgLy8gV2hldGhlciBhIGxpbmUgb3IgYXJlYSBzZXJpZXMgZHJhd3MgYSBkb3Qgb24gZWFjaCBwb2ludC4gT21pdHRlZCwgdHJ1ZS5cbiAgbWFya2Vycz86IGJvb2xlYW47XG4gIC8vIEEgbGluZSBhY3Jvc3MgdGhlIHBsb3QgYXQgdGhpcyBzZXJpZXMnIGF2ZXJhZ2UsIG1lZGlhbiwgbG93ZXN0IG9yIGhpZ2hlc3RcbiAgLy8gdmFsdWUgb3ZlciB0aGUgcG9pbnRzIG9uIHNjcmVlbi4gVmVydGljYWwgYXhpcyBjaGFydHMgb25seS5cbiAgbWFya0xpbmU/OiBSZXBvcnRDaGFydE1hcmtTdGF0O1xufVxuXG4vLyBPbmUgYXV0aG9yZWQgY29sdW1uIG9mIGEgcGxhaW4gbGlzdC5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdENvbHVtbiBleHRlbmRzIE51bWJlckZvcm1hdFNwZWMge1xuICBjb2x1bW46IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIC8vIGRhdGUga2VlcHMgdGhlIGNvbHVtbiBhIFJBVyB0aW1lc3RhbXAsIHNvIHRoZSByZXBvcnQgdGltZXpvbmUgYW5kIGl0c1xuICAvLyBkYXRlUmFuZ2UgZmlsdGVycyBrZWVwIHdvcmtpbmcsIGFuZCB0aGUgdmlld2VyIHJlbmRlcnMgaXQgYXMgYSBkYXkgaW4gdGhlXG4gIC8vIHJlcG9ydCdzIHpvbmUgYW5kIGxvY2FsZS4gbnVtYmVyLCBwZXJjZW50IGFuZCBjdXJyZW5jeSBmb3JtYXQgdGhlIHZhbHVlIGFzXG4gIC8vIGEgS1BJIG1lYXN1cmUgZG9lcy4gV2l0aG91dCBhIGZvcm1hdCB0aGUgdmFsdWUgcHJpbnRzIGFzIGl0IGNhbWUuXG4gIGZvcm1hdD86IFJlcG9ydExpc3RDb2x1bW5Gb3JtYXQ7XG4gIC8vIEEgY29sdW1uIHRoZSBTUUwgYWxyZWFkeSBmb3JtYXR0ZWQgaXMgdGV4dCwgc28gaXQgbmFtZXMgYHNvcnRDb2x1bW5gOiB0aGVcbiAgLy8gcmF3IG51bWVyaWMgYWxpYXMgdGhlIHF1ZXJ5IGFsc28gb3V0cHV0cywgd2hpY2ggdGhlIHNlcnZlciBvcmRlcnMgYnlcbiAgLy8gaW5zdGVhZC5cbiAgc29ydENvbHVtbj86IHN0cmluZztcbiAgLy8gZmFsc2Uga2VlcHMgdGhlIGNlbGwgb24gb25lIGxpbmUuIE9taXR0ZWQsIGEgbG9uZyB2YWx1ZSB3cmFwcy5cbiAgd3JhcD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdENvbmZpZyB7XG4gIGNvbHVtbnM/OiBMaXN0Q29sdW1uW107XG4gIC8vIEEgY3Jvc3MtdGFiOiBgcm93QnlgIHN0YXlzIGRvd24gdGhlIHNpZGUgYW5kIGV2ZXJ5IHZhbHVlIG9mIGBwaXZvdEJ5YFxuICAvLyBiZWNvbWVzIGEgY29sdW1uLiBUaGUgdHdvIGFyZSBzZXQgdG9nZXRoZXIsIGBjb2x1bW5zYCBpcyBvbWl0dGVkICh0aGVcbiAgLy8gYmFja2VuZCByZWplY3RzIGF1dGhvcmluZyBib3RoKSwgYW5kIHRoZSBjb2x1bW4gc2V0IGFycml2ZXMgd2l0aCB0aGUgcm93c1xuICAvLyBpbiBDb21wb25lbnREYXRhLmNvbHVtbnMgYmVjYXVzZSBvbmx5IHRoZSByZXN1bHQga25vd3MgdGhlIHBpdm90IHZhbHVlcy5cbiAgLy8gcm93QnkubGFiZWwgaGVhZHMgdGhlIHNpZGUgY29sdW1uIG9uIHNjcmVlbiBhbmQgaW4gZXZlcnkgZXhwb3J0LCBhbmRcbiAgLy8gZGVmYXVsdHMgdG8gdGhlIGNvbHVtbiBuYW1lLiBwaXZvdEJ5IGNhcnJpZXMgbm8gbGFiZWw6IGl0cyB2YWx1ZXMgYXJlIHRoZVxuICAvLyBoZWFkaW5ncy5cbiAgcm93Qnk/OiB7IGNvbHVtbjogc3RyaW5nOyBsYWJlbD86IHN0cmluZyB9O1xuICBwaXZvdEJ5PzogeyBjb2x1bW46IHN0cmluZyB9O1xuICAvLyBUaGUgYXV0aG9yZWQgb3JkZXIsIG1vc3QgaW1wb3J0YW50IGZpcnN0LiBBIGxpc3Qgc2F2ZWQgYmVmb3JlIG11bHRpLWtleVxuICAvLyBzb3J0aW5nIHN0b3JlcyBvbmUgb2JqZWN0LCBzbyByZWFkIGl0IHRocm91Z2ggbGlzdFNvcnRUZXJtcygpIG9ubHkuXG4gIHNvcnQ/OiBSZXBvcnRTb3J0IHwgUmVwb3J0U29ydFtdO1xuICAvLyBIb3cgbWFueSBsZWFkaW5nIGNvbHVtbnMgc3RheSBpbiB2aWV3IHdoaWxlIHRoZSBsaXN0IHNjcm9sbHMgc2lkZXdheXNcbiAgLy8gKDAtMykuIFVuc2V0LCBhIGNyb3NzLXRhYiBwaW5zIGl0cyByb3cta2V5IGNvbHVtbiBhbmQgYSBwbGFpbiBsaXN0IG5vbmUuXG4gIHBpbm5lZENvbHVtbnM/OiBudW1iZXIgfCBudWxsO1xuICBwYWdlU2l6ZT86IG51bWJlcjtcbiAgLy8gdHJ1ZSBhZGRzIGEgdG90YWxzIHJvdyB1bmRlciB0aGUgbGlzdDogdGhlIHNlcnZlciBydW5zIHRoZSBtZWFzdXJlcyBhZ2FpblxuICAvLyBvdmVyIGV2ZXJ5IHJvdyB0aGUgZmlsdGVycyBrZWVwLCB3aXRob3V0IGdyb3VwaW5nLCBhbmQgYSBjcm9zcy10YWIgdG90YWxzXG4gIC8vIGVhY2ggY29sdW1uLlxuICB0b3RhbHM/OiBib29sZWFuO1xuICAvLyBBIGNyb3NzLXRhYiBvbmx5OiBob3cgZXZlcnkgY2VsbCBvZiB0aGUgZ3JpZCBpcyBmb3JtYXR0ZWQsIHdpdGggYSBLUElcbiAgLy8gbWVhc3VyZSdzIGtleXMuIFRoZSByb3cga2V5IGNvbHVtbiBzdGF5cyBhcyBpdCBjYW1lLlxuICBjZWxsRm9ybWF0PzogTnVtYmVyRm9ybWF0U3BlYyAmIHsgZm9ybWF0PzogUmVwb3J0VmFsdWVGb3JtYXQgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBLcGlDb25maWcge1xuICBtZWFzdXJlPzogQ2hhcnRNZWFzdXJlO1xuICAvLyBXaGV0aGVyIGEgcmlzZSBpbiB0aGUgdmFsdWUgaXMgZ29vZCBuZXdzLCBiYWQgbmV3cyBvciBuZWl0aGVyOiBpdCBwaWNrc1xuICAvLyB0aGUgZGVsdGEncyBjb2xvciBhbmQgZGVjaWRlcyB3aGVuIGEgdGFyZ2V0IGlzIG1ldCAoZ29vZDogYXQgb3IgYWJvdmUgaXQ7XG4gIC8vIGJhZDogYXQgb3IgYmVsb3cgaXQ7IG5ldXRyYWw6IG5ldmVyIGp1ZGdlZCkuIE9taXR0ZWQgb3IgbnVsbCByZWFkcyBnb29kLlxuICBpbmNyZWFzZUlzPzogUmVwb3J0Q2hhbmdlUG9sYXJpdHkgfCBudWxsO1xuICAvLyBBIG51bWJlciB0aGUgdXNlciBnYXZlIGZvciB0aGUgdmFsdWUgdG8gcmVhY2gsIG5ldmVyIG9uZSByZWFkIG9mZiB0aGVcbiAgLy8gZGF0YS4gVGhlIHNlcnZlciBzZW5kcyB0aGUgcHJvZ3Jlc3MgdG93YXJkIGl0IHdpdGggdGhlIGRhdGEuXG4gIHRhcmdldD86IEtwaVRhcmdldENvbmZpZyB8IG51bGw7XG4gIC8vIEEgc21hbGwgdHJlbmQgbGluZSBvZiB0aGUgdmFsdWUgb3ZlciBpdHMgbGFzdCBwZXJpb2RzLCBkcmF3biB1bmRlciBpdC5cbiAgc3BhcmtsaW5lPzogS3BpU3BhcmtsaW5lQ29uZmlnIHwgbnVsbDtcbn1cblxuLy8gQSBLUEkncyB0YXJnZXQ6IHRoZSB2YWx1ZSwgYW5kIGFuIG9wdGlvbmFsIGNhcHRpb24gZm9yIGl0ICgnR29hbCcpLlxuZXhwb3J0IGludGVyZmFjZSBLcGlUYXJnZXRDb25maWcge1xuICB2YWx1ZTogbnVtYmVyO1xuICBsYWJlbD86IHN0cmluZyB8IG51bGw7XG59XG5cbi8vIEEgS1BJJ3Mgc3BhcmtsaW5lOiBob3cgd2lkZSBlYWNoIHBvaW50J3MgcGVyaW9kIGlzIChudWxsIHJlYWRzIG1vbnRoKSBhbmRcbi8vIGhvdyBtYW55IHBlcmlvZHMgaXQgZHJhd3MsIDIgdG8gNjAgKG51bGwgcmVhZHMgMTIpLlxuZXhwb3J0IGludGVyZmFjZSBLcGlTcGFya2xpbmVDb25maWcge1xuICBncmFudWxhcml0eT86IENoYXJ0R3JhbnVsYXJpdHkgfCBudWxsO1xuICBwZXJpb2RzPzogbnVtYmVyIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRTb3J0IHtcbiAgY29sdW1uOiBzdHJpbmc7XG4gIGRpcmVjdGlvbj86ICdhc2MnIHwgJ2Rlc2MnO1xufVxuXG5leHBvcnQgdHlwZSBSZXBvcnRGaWx0ZXJUeXBlID0gJ2RhdGVSYW5nZScgfCAnc2VsZWN0JyB8ICdrZXl3b3JkJyB8ICdudW1iZXJSYW5nZSc7XG5cbi8vIFdoZXJlIGEgZmlsdGVyIGdyb3VwJ3MgY29udHJvbCBpcyBleHBvc2VkLiBBIGdyb3VwIGNhbiBiZSBzaG93biBvbiBpdHNcbi8vIGNvbXBvbmVudHMsIGluIHRoZSByZXBvcnQgYmFyLCBvciBCT1RIIGF0IG9uY2UgKHRoZSB0d28gYXJlIGluZGVwZW5kZW50XG4vLyB0b2dnbGVzIGluIHRoZSBVSSk7IGEgY29sdW1uIHdpdGggbmVpdGhlciBleHBvc2VkIHNpbXBseSBoYXMgbm8gZmlsdGVyLlxuLy8gJ3BhZ2UnIHNob3dzIGl0IGluIHRoZSByZXBvcnQgYmFyIG9mIG9uZSBwYWdlIG9ubHkgKFJlcG9ydEZpbHRlckdyb3VwLnBhZ2VJZCkuXG5leHBvcnQgdHlwZSBSZXBvcnRGaWx0ZXJMZXZlbCA9ICdjb21wb25lbnQnIHwgJ3JlcG9ydCcgfCAnYm90aCcgfCAncGFnZSc7XG5cbi8vIE9uZSBmaWx0ZXJhYmxlIG91dHB1dCBjb2x1bW4gb2YgYSBjb21wb25lbnQncyBTUUwsIHdpdGggdGhlIGZpbHRlciBpbnRlcmZhY2Vcbi8vIElORkVSUkVEIGZyb20gaXRzIGRhdGEgKHRoZSBodW1hbiBuZXZlciBwaWNrcyB0aGUgaW50ZXJmYWNlIOKAlCBpdCBmb2xsb3dzIHRoZVxuLy8gY29sdW1uJ3MgdHlwZSkuIERyaXZlcyB0aGUgRmlsdGVycyB0YWIgbGlzdGluZy5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0RmlsdGVyYWJsZUNvbHVtbiB7XG4gIGNvbHVtbjogc3RyaW5nO1xuICB0eXBlOiBSZXBvcnRGaWx0ZXJUeXBlO1xuICAvLyBFdmVyeSBpbnRlcmZhY2UgdGhlIGNvbHVtbiBjYW4gdGFrZSwgdGhlIGluZmVycmVkIG9uZSAodHlwZSkgZmlyc3Q6IGFcbiAgLy8gbnVtZXJpYyBjb2x1bW4gdGFrZXMgWydzZWxlY3QnLCAnbnVtYmVyUmFuZ2UnXS4gQWJzZW50IG9uIG9sZGVyIHNlcnZlcnMuXG4gIHR5cGVzPzogUmVwb3J0RmlsdGVyVHlwZVtdO1xufVxuXG4vLyBHcm91bmQgdHJ1dGg6IG9uZSBmaWx0ZXJhYmxlIG91dHB1dCBjb2x1bW4gT04gb25lIGNvbXBvbmVudCdzIFNRTC4gQWx3YXlzIGFcbi8vIG1lbWJlciBvZiBhIGZpbHRlciBncm91cCDigJQgdGhlIHVuaXQgdGhhdCBsaW5rcyBlcXVpdmFsZW50IGZpbHRlcnMgYWNyb3NzXG4vLyBjb21wb25lbnRzIGFuZCBkZWNpZGVzIHdoZXJlIHRoZSBjb250cm9sIHJlbmRlcnMgKGNvbXBvbmVudCB2cyByZXBvcnQgYmFyKS5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0RmlsdGVyIHtcbiAgaWQ6IG51bWJlcjtcbiAgY29tcG9uZW50SWQ6IG51bWJlcjtcbiAgZmlsdGVyR3JvdXBJZDogbnVtYmVyO1xuICBmaWx0ZXJDb2x1bW46IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZyB8IG51bGw7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIGhhc09wdGlvbnM6IGJvb2xlYW47XG4gIGNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8vIE9uZSBjaG9pY2UgaW4gYSBzZWxlY3QgZmlsdGVyJ3Mgb3B0aW9uIGxpc3QuIFRoZSB2YWx1ZSBpcyB3aGF0IHRoZSBmaWx0ZXJcbi8vIG1hdGNoZXMgb24gYW5kIGdldHMgc3RvcmVkIGluIGEgc2F2ZWQgZGVmYXVsdCDigJQgZm9yIGFuIGVudGl0eSB0aGF0IGlzIGl0c1xuLy8gc3RhYmxlIGlkLCBuZXZlciBpdHMgbmFtZSwgc28gcmVuYW1pbmcgdGhlIGVudGl0eSBtb3ZlcyB0aGUgbGFiZWwgd2l0aG91dFxuLy8gYnJlYWtpbmcgdGhlIGRlZmF1bHQuIFRoZSBsYWJlbCBpcyBvbmx5IGV2ZXIgd2hhdCB0aGUgdmlld2VyIHJlYWRzLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRGaWx0ZXJPcHRpb24ge1xuICB2YWx1ZTogdW5rbm93bjtcbiAgbGFiZWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRGaWx0ZXJHcm91cCB7XG4gIGlkOiBudW1iZXI7XG4gIC8vIFRoZSBncm91cCdzIGlkZW50aWZpZXIsIHVuaXF1ZSBpbiB0aGUgcmVwb3J0OiBjYW1lbENhc2UsIGEgbGV0dGVyIGZpcnN0LFxuICAvLyB0aGVuIGxldHRlcnMgYW5kIGRpZ2l0cy4gU2V0IGFwYXJ0IGZyb20gdGhlIGxhYmVsOiBhIG5ldyBsYWJlbCBuZXZlclxuICAvLyBjaGFuZ2VzIGl0LCBhbmQgaXQgaXMgZWRpdGVkIG9uIGl0cyBvd24gKFJlcG9ydCBzZXR0aW5ncyA+IEZpbHRlcnMpLlxuICAvLyBUaWxlcyBhbmQgc2F2ZWQgZmlsdGVycyBiaW5kIHRoZSBncm91cCBieSBpZCwgbmV2ZXIgYnkgbmFtZS4gT3B0aW9uYWxcbiAgLy8gYmVjYXVzZSBhbiBvbGRlciBzZXJ2ZXIgc2VuZHMgbm9uZS5cbiAgbmFtZT86IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZyB8IG51bGw7XG4gIHR5cGU6IFJlcG9ydEZpbHRlclR5cGU7XG4gIGxldmVsOiBSZXBvcnRGaWx0ZXJMZXZlbDtcbiAgb3JkZXI6IG51bWJlcjtcbiAgY29uZmlnOiB7IGRlZmF1bHQ/OiBGaWx0ZXJHcm91cERlZmF1bHQgfSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBmaWx0ZXJzOiBSZXBvcnRGaWx0ZXJbXTtcbiAgLy8gVGhlIHBhZ2Ugd2hvc2UgcmVwb3J0IGJhciBzaG93cyB0aGUgZ3JvdXA6IHNldCBvbmx5IHdoZW4gbGV2ZWwgaXMgJ3BhZ2UnLFxuICAvLyBudWxsIG90aGVyd2lzZS4gQWJzZW50IG9uIG9sZGVyIHNlcnZlcnMuXG4gIHBhZ2VJZD86IG51bWJlciB8IG51bGw7XG4gIC8vIFRoZSBjb21wb25lbnRzIG9mIHRoZSBncm91cCdzIGFjdGl2ZSwgZW5hYmxlZCBtZW1iZXJzIHRoYXQgYXJlIHRpbGVzXG4gIC8vIChjaGFydCwgbGlzdCwgS1BJKS4gQWJzZW50IG9uIG9sZGVyIHNlcnZlcnMuXG4gIGNvbXBvbmVudElkcz86IG51bWJlcltdO1xuICAvLyBUcnVlIHdoZW4gYW4gZW5hYmxlZCBtZW1iZXIgYmluZHMgc2V2ZXJhbCBjb2x1bW5zLCB3aGVyZSB2YWx1ZXMgY2Fubm90XG4gIC8vIGJlIGxlZnQgb3V0OiB0aGUgZ3JvdXAgb2ZmZXJzIG5vICdFeGNsdWRlIHRoZXNlJyAob2ZmZXJzRXhjbHVkZSkuIEFic2VudFxuICAvLyBvbiBvbGRlciBzZXJ2ZXJzLlxuICBtdWx0aUNvbHVtbj86IGJvb2xlYW47XG4gIC8vIEEgc2VsZWN0IGdyb3VwJ3MgbGFiZWwgZm9yIGEgYmxhbmsgcm93LCBudWxsIHdoZW4gYmxhbmsgcm93cyBoYXZlIG5vbmU6XG4gIC8vIGFuIGV4Y2x1ZGUgbGluZSBzYXlzIHdoZXRoZXIgdGhlIGJsYW5rIHJvd3MgYXJlIGtlcHQuIFNlbnQgZm9yIHNlbGVjdFxuICAvLyBncm91cHMgb25seSwgYW5kIGFic2VudCBvbiBvbGRlciBzZXJ2ZXJzLlxuICBibGFua0xhYmVsPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuLy8gQSBmaWx0ZXIgZ3JvdXAncyB2YWx1ZSBpbiBpdHMgc3RvcmVkIHNoYXBlOiBpdHMgYXV0aG9yZWQgZGVmYXVsdCAodGhlIHZhbHVlXG4vLyB0aGF0IHNlZWRzIHRoZSByZXBvcnQgYmFyIG9uIGV2ZXJ5IG9wZW4pLCBhbmQgYSB2YWx1ZSB0aGUgYXNzaXN0YW50IHJ1bnMgaXQgYXQuIFNoYXBlIGZvbGxvd3MgdGhlIGdyb3VwJ3MgdHlwZTogZGF0ZVJhbmdlXG4vLyB1c2VzIHN0YXJ0L2VuZCAoYSBmaXhlZCBjYWxlbmRhci1kYXkgcmFuZ2UpIG9yIGEgcmVsYXRpdmUgcHJlc2V0OyBzZWxlY3Rcbi8vIHVzZXMgdmFsdWVzIG9yIGV4Y2x1ZGVWYWx1ZXMsIG5ldmVyIGJvdGg7IGtleXdvcmQgdXNlcyB2YWx1ZTsgbnVtYmVyUmFuZ2Vcbi8vIHVzZXMgbWluIGFuZCBtYXguXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckdyb3VwRGVmYXVsdCB7XG4gIC8vIGRhdGVSYW5nZSByZWxhdGl2ZSBwcmVzZXQsIHJlc29sdmVkIG9uIGV2ZXJ5IG9wZW4gYWdhaW5zdCB0b2RheSBpbiB0aGVcbiAgLy8gcmVwb3J0J3MgZWZmZWN0aXZlIHpvbmUgKFJlcG9ydC5lZmZlY3RpdmVUaW1lem9uZSkuIE9uZSBvZjogdGhpc1dlZWssXG4gIC8vIGxhc3RXZWVrLCBsYXN0N0RheXMsIGxhc3QzMERheXMsIGxhc3QzTW9udGhzLCBsYXN0Nk1vbnRocywgbGFzdDEyTW9udGhzLFxuICAvLyB0aGlzTW9udGgsIHRoaXNRdWFydGVyLCB0aGlzWWVhci95ZWFyVG9EYXRlLiBXZWVrcyBydW4gTW9uZGF5IHRvIFN1bmRheSxcbiAgLy8gdGhlIHNhbWUgd2Vla3MgdGhlIHNlcnZlcidzIHdlZWtseSB0aW1lIGJ1Y2tldHMgdXNlLlxuICByZWxhdGl2ZT86IHN0cmluZztcbiAgc3RhcnQ/OiBzdHJpbmc7IC8vIGRhdGVSYW5nZSBmaXhlZCBzdGFydCAoeXl5eS1NTS1kZClcbiAgZW5kPzogc3RyaW5nOyAvLyBkYXRlUmFuZ2UgZml4ZWQgZW5kICh5eXl5LU1NLWRkKVxuICB2YWx1ZXM/OiB1bmtub3duW107IC8vIHNlbGVjdCBkZWZhdWx0IHBpY2tlZCB2YWx1ZXNcbiAgdmFsdWU/OiBzdHJpbmc7IC8vIGtleXdvcmQgZGVmYXVsdCB0ZXh0XG4gIC8vIHNlbGVjdDogdGhlIHZhbHVlcyB0byBsZWF2ZSBvdXQgKHJvd3Mgd2l0aCBhIGJsYW5rIHZhbHVlIGFyZSBrZXB0KS5cbiAgZXhjbHVkZVZhbHVlcz86IHVua25vd25bXTtcbiAgLy8gbnVtYmVyUmFuZ2U6IHRoZSBsb3cgYW5kIGhpZ2ggZW5kcywgZWl0aGVyIG9uZSBvcGVuIChhYnNlbnQpLiAwIGlzIGFuXG4gIC8vIGVuZCBsaWtlIGFueSBvdGhlci5cbiAgbWluPzogbnVtYmVyO1xuICBtYXg/OiBudW1iZXI7XG59XG5cbi8vIFRoZSBzZXNzaW9uIHZhbHVlIG9mIGEgZmlsdGVyIGdyb3VwOiBzaGFwZSBkZXBlbmRzIG9uIHRoZSBncm91cCdzIHR5cGUuIE5vdFxuLy8gc3RvcmVkIG9uIHRoZSBzZXJ2ZXI6IGl0IGxpdmVzIGluIHRoZSBvcGVuIHJlcG9ydCdzIHN0YXRlXG4vLyAoUmVwb3J0RmlsdGVyU3RhdGVTZXJ2aWNlKS5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyR3JvdXBWYWx1ZSB7XG4gIHN0YXJ0PzogRGF0ZSB8IHN0cmluZyB8IG51bGw7IC8vIGRhdGVSYW5nZVxuICBlbmQ/OiBEYXRlIHwgc3RyaW5nIHwgbnVsbDsgLy8gZGF0ZVJhbmdlXG4gIHZhbHVlcz86IHVua25vd25bXTsgLy8gc2VsZWN0XG4gIHZhbHVlPzogc3RyaW5nOyAvLyBrZXl3b3JkXG4gIC8vIGRhdGVSYW5nZSBvbmx5OiB0aGUgcmVsYXRpdmUgcHJlc2V0IG5hbWUgdGhlc2UgZGF0ZXMgd2VyZSByZXNvbHZlZCBmcm9tXG4gIC8vIChhIEZpbHRlckdyb3VwRGVmYXVsdC5yZWxhdGl2ZSBuYW1lKS4gU2V0IG9ubHkgd2hlbiB0aGUgdmFsdWUgd2FzIHNlZWRlZFxuICAvLyBmcm9tIHRoZSBncm91cCdzIHJlbGF0aXZlIGRlZmF1bHQsIHNvIHRoZSByYW5nZSBrZWVwcyByb2xsaW5nXG4gIC8vICgnbGFzdDMwRGF5cycpIGluc3RlYWQgb2YgZnJlZXppbmcgdHdvIGRhdGVzLCBhbmQgdGhlIGRhdGEgcmVxdWVzdCBuYW1lcyB0aGVcbiAgLy8gcGVyaW9kIGl0IGNvdmVycyAoc2VlXG4gIC8vIFJlc29sdmVkRmlsdGVyVmFsdWUucHJlc2V0KS4gQW55IGRhdGUgcGlja2VkIGJ5IHRoZSB2aWV3ZXIsIGEgZGF0ZSBwaWNrZXJcbiAgLy8gcHJlc2V0IGluY2x1ZGVkLCBpcyBzdG9yZWQgd2l0aG91dCBpdC5cbiAgcHJlc2V0Pzogc3RyaW5nO1xuICAvLyBzZWxlY3Q6IHRoZSB2YWx1ZXMgdG8gbGVhdmUgb3V0LiBTd2l0Y2hpbmcgYSBzZWxlY3QgYmV0d2VlbiBrZWVwaW5nIGFuZFxuICAvLyBsZWF2aW5nIG91dCBtb3ZlcyBpdHMgbGlzdCBmcm9tIHZhbHVlcyB0byBleGNsdWRlVmFsdWVzLlxuICBleGNsdWRlVmFsdWVzPzogdW5rbm93bltdO1xuICAvLyBudW1iZXJSYW5nZTogdGhlIGxvdyBhbmQgaGlnaCBlbmRzOyBudWxsIG9yIGFic2VudCA9IG9wZW4uXG4gIG1pbj86IG51bWJlciB8IG51bGw7XG4gIG1heD86IG51bWJlciB8IG51bGw7XG59XG5cbi8vIEEgcmVsYXRpdmUgZGF0ZSByYW5nZSB0aGUgc2VydmVyIHJlc29sdmVzIGFnYWluc3QgdG9kYXkgaW4gdGhlIHJlcG9ydCdzXG4vLyB6b25lOiB0aGUgbmFtZXMgYSBGaWx0ZXJHcm91cERlZmF1bHQucmVsYXRpdmUgYW5kIGEgdGltZWZyYW1lJ3MgcmFuZ2UgdGFrZS5cbi8vIE1pcnJvcnMgdGhlIHNlcnZlcidzIFJlcG9ydFJlbGF0aXZlUmFuZ2VFbnVtIHZhbHVlIGZvciB2YWx1ZVxuLy8gKFJlcG9ydFJlbGF0aXZlUmFuZ2VFbnVtVGVzdCBwaW5zIHRoZSBkYXlzIGVhY2ggb25lIGNvdmVycykuXG5leHBvcnQgdHlwZSBSZXBvcnRSZWxhdGl2ZVJhbmdlID1cbiAgfCAndGhpc1dlZWsnXG4gIHwgJ2xhc3RXZWVrJ1xuICB8ICdsYXN0N0RheXMnXG4gIHwgJ2xhc3QzMERheXMnXG4gIHwgJ2xhc3QzTW9udGhzJ1xuICB8ICdsYXN0Nk1vbnRocydcbiAgfCAnbGFzdDEyTW9udGhzJ1xuICB8ICd0aGlzTW9udGgnXG4gIHwgJ3RoaXNRdWFydGVyJ1xuICB8ICd0aGlzWWVhcidcbiAgfCAneWVhclRvRGF0ZSc7XG5cbi8vIE9uZSByZXNvbHZlZCBmaWx0ZXIgc2VudCB3aXRoIGEgY29tcG9uZW50J3MgZGF0YSByZXF1ZXN0LlxuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZEZpbHRlclZhbHVlIHtcbiAgZmlsdGVySWQ6IG51bWJlcjtcbiAgc3RhcnQ/OiBzdHJpbmc7XG4gIGVuZD86IHN0cmluZztcbiAgdmFsdWVzPzogdW5rbm93bltdO1xuICB2YWx1ZT86IHN0cmluZztcbiAgLy8gZGF0ZVJhbmdlIG9ubHk6IHRoZSByZWxhdGl2ZSByYW5nZSBzdGFydCBhbmQgZW5kIHN0aWxsIGFyZSwgc2VudCBvbmx5XG4gIC8vIHdoaWxlIHRoZXkgYXJlIGV4YWN0bHkgdGhhdCByYW5nZSByZXNvbHZlZCB0b2RheSBpbiB0aGUgcmVwb3J0J3Mgem9uZS4gSXRcbiAgLy8gdGVsbHMgdGhlIHNlcnZlciB3aGljaCBwZXJpb2QgdGhlIGRheXMgY292ZXIgKG9uIHRoZSBmaXJzdCBkYXlzIG9mIGFcbiAgLy8gcXVhcnRlciwgdGhpc01vbnRoIGFuZCB0aGlzUXVhcnRlciBhcmUgdGhlIHNhbWUgZGF5cyksIHNvIGEgY29tcGFyaXNvblxuICAvLyBzaGlmdHMgYnkgdGhlIHJpZ2h0IHVuaXQuIHN0YXJ0IGFuZCBlbmQgc3RheSB0aGUgd2luZG93OyBhIHNlcnZlciB0aGF0XG4gIC8vIGRvZXMgbm90IGtub3cgdGhlIGtleSBpZ25vcmVzIGl0LlxuICBwcmVzZXQ/OiBSZXBvcnRSZWxhdGl2ZVJhbmdlO1xuICAvLyBzZWxlY3Q6IHRoZSB2YWx1ZXMgdG8gbGVhdmUgb3V0IChzZW50IGluc3RlYWQgb2YgdmFsdWVzKS5cbiAgZXhjbHVkZVZhbHVlcz86IHVua25vd25bXTtcbiAgLy8gbnVtYmVyUmFuZ2U6IHRoZSBsb3cgYW5kIGhpZ2ggZW5kczsgYW4gb3BlbiBlbmQgaXMgbGVmdCBvdXQsIDAgaXMgc2VudC5cbiAgbWluPzogbnVtYmVyO1xuICBtYXg/OiBudW1iZXI7XG59XG5cbi8vIFBlci1jb21wb25lbnQgaW50ZXJhY3Rpb24gc3RhdGUgc2VudCB3aXRoIHRoZSBkYXRhIHJlcXVlc3Q6IGxpc3RzIHNlbmRcbi8vIHNvcnQvcGFnaW5nIGFuZCB0aGUgdGV4dCBpbiB0aGVpciBzZWFyY2ggYm94OyB0aGUgdGlsZXMgdGhhdCBmb2xsb3cgdGhlXG4vLyBncm91cC1ieSAoZm9sbG93c0dyb3VwQnkpIHNlbmQgdGhlIGdyYWluIHBpY2tlZCBvbiB0aGUgcmVwb3J0J3MgZ3JvdXAtYnkgY29udHJvbCwgd2hpY2ggb3ZlcnJpZGVzIHRoZSBhdXRob3JlZFxuLy8gZ3JhbnVsYXJpdHkgZm9yIHRoYXQgcmVxdWVzdCBvbmx5LiBUaGUgd2lyZSBrZXkgc3RheXMgYGZyZXF1ZW5jeWAg4oCUIGl0IGlzIHRoZVxuLy8gYnVja2V0aW5nIGZyZXF1ZW5jeSB0aGUgc2VydmVyIGFwcGxpZXMuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERhdGFTdGF0ZSB7XG4gIHNvcnQ/OiBSZXBvcnRTb3J0O1xuICBwYWdlPzogbnVtYmVyO1xuICBwYWdlU2l6ZT86IG51bWJlcjtcbiAgZnJlcXVlbmN5PzogQ2hhcnRHcmFudWxhcml0eTtcbiAgLy8gQSBsaXN0J3Mgc2VhcmNoIGJveCB0ZXh0LiBUaGUgc2VydmVyIHRyaW1zIGl0LCBjdXRzIGl0IHRvIGl0cyBvd24gbWF4aW11bVxuICAvLyBsZW5ndGggYW5kIG1hdGNoZXMgaXQgYWdhaW5zdCBldmVyeSB0ZXh0IGNvbHVtbiB0aGUgbGlzdCBzaG93cy5cbiAgc2VhcmNoPzogc3RyaW5nO1xuICAvLyBUaGUgY29uZmlnIGNvbHVtbiBuYW1lcyBhIHZpZXdlciBoaWQgb24gYSBwbGFpbiBsaXN0LiBTZW50IHdpdGggYSBDU1ZcbiAgLy8gZXhwb3J0IG9ubHkgKHRoZSBzY3JlZW4gaGlkZXMgdGhlbSBpdHNlbGYpOiB0aGUgZmlsZSBsZWF2ZXMgdGhlbSBvdXQuIFRoZVxuICAvLyBzZXJ2ZXIgaWdub3JlcyBpdCBvbiBhIGNyb3NzLXRhYiwgYW5kIHdoZW4gaXQgd291bGQgaGlkZSBldmVyeSBjb2x1bW4uXG4gIGhpZGRlbkNvbHVtbnM/OiBzdHJpbmdbXTtcbiAgLy8gQSBjaGFydCdzIGRyaWxsIHBhdGgsIHRvcCBmaXJzdC4gVGhlIGRyaWxsZWQgbGV2ZWwgd2lucyBvdmVyIGZyZXF1ZW5jeVxuICAvLyBmb3IgdGhpcyB0aWxlLlxuICBkcmlsbD86IFJlcG9ydERyaWxsU3RlcFtdO1xuICAvLyBXaGlsZSBtYXRjaCBpcyBhbnk6IHRoZSBlbGlnaWJsZSBncm91cHMgdGhhdCBoYXZlIGEgdmFsdWUuXG4gIG1hdGNoQW55R3JvdXBJZHM/OiBudW1iZXJbXTtcbiAgLy8gQSB0YWJsZSdzIGxheW91dCBhcyB0aGUgdmlld2VyIGNoYW5nZWQgaXQsIHNlbnQgd2l0aCBhIGZpbGUgKHRoZSBDU1YsXG4gIC8vIHRoZSB6aXApIHNvIGl0IGhvbGRzIHdoYXQgdGhlIHNjcmVlbiBzaG93cy4gQWJzZW50OiB0aGUgc3RvcmVkIGxheW91dC5cbiAgbGF5b3V0PzogR3JpZExheW91dDtcbiAgLy8gU2V0IG9ubHkgb24gYSByZXF1ZXN0IHNlbnQgYmVjYXVzZSB0aGUgY3Jvc3MtZmlsdGVyIGNoYW5nZWQsIGZvciBhIHRpbGVcbiAgLy8gd2hvc2UgbGFzdCByZWFkIGFwcGxpZWQgbm8gY3Jvc3MgZW50cnk6IHRoZSBzZXJ2ZXIgbWF5IGFuc3dlclxuICAvLyB1bmNoYW5nZWQgaW5zdGVhZCBvZiByZWFkaW5nIHRoZSByb3dzIGFnYWluLiBFeHBvcnRzIG5ldmVyIHNldCBpdC5cbiAgdW5jaGFuZ2VkSWZVbnJlYWNoZWQ/OiB0cnVlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERhdGEge1xuICBjb2x1bW5zOiBzdHJpbmdbXTtcbiAgcm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbiAgcGFnaW5nPzogeyB0b3RhbDogbnVtYmVyOyBwYWdlOiBudW1iZXI7IHBhZ2VTaXplOiBudW1iZXIgfTtcbiAgdHJ1bmNhdGVkOiBib29sZWFuO1xuICAvLyBUaGUgZWZmZWN0aXZlIHRpbWUgYnVja2V0IHRoZSByb3dzIHdlcmUgZ3JvdXBlZCBpbnRvIChhZnRlciBhbnkgZ3JvdXAtYnlcbiAgLy8gb3ZlcnJpZGUpLCBvciBudWxsIGZvciBhIG5vbi10aW1lIGF4aXMuIERyaXZlcyB0aGUgY29tcGFjdCB4LWF4aXMgbGFiZWxzLlxuICBncmFudWxhcml0eT86IENoYXJ0R3JhbnVsYXJpdHkgfCBudWxsO1xuICAvLyBQYWdlIDEgb2YgYSBzZWFyY2hlZCBsaXN0IHdob3NlIHNlYXJjaCBjb3VsZCBub3QgYXBwbHkgKHRoZSBsaXN0IGhhcyBub1xuICAvLyB0ZXh0IGNvbHVtbiB0byBzZWFyY2gpOiB3aHkgdGhlIHJvd3MgYXJlIG5vdCBuYXJyb3dlZC4gQWJzZW50IG90aGVyd2lzZS5cbiAgc2VhcmNoTm90ZT86IHN0cmluZyB8IG51bGw7XG4gIC8vIFBhZ2UgMSBvZiBhIGxpc3Qgd2l0aCBjb25maWcudG90YWxzIG9uOiBpdHMgdG90YWxzIHJvdywgYXMgcmF3IHZhbHVlc1xuICAvLyBrZXllZCBsaWtlIHRoZSBjb2x1bW5zIChhIHBsYWluIGxpc3QncyBtZWFzdXJlIGFsaWFzZXM7IGEgY3Jvc3MtdGFiJ3NcbiAgLy8gcGl2b3QgY2VsbCBjb2x1bW5zLCB0aGUgcm93LWtleSBjb2x1bW4gYWJzZW50KSwgb3IgbnVsbCB3aXRoIHRvdGFsc05vdGVcbiAgLy8gc2F5aW5nIHdoeSB0aGVyZSBpcyBub25lLiBBYnNlbnQgb24gZXZlcnkgb3RoZXIgcGFnZSBhbmQgbGlzdC5cbiAgdG90YWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsO1xuICB0b3RhbHNOb3RlPzogc3RyaW5nIHwgbnVsbDtcbiAgLy8gVGhlIHdpbmRvdyBvZiBkYXlzIHRoZSBjb21wb25lbnQgcmVhZHMsIHdoZW4gaXRzIHF1ZXJ5IGhhcyBhIHRpbWVmcmFtZS5cbiAgLy8gQWJzZW50IG90aGVyd2lzZSwgYW5kIGZyb20gb2xkZXIgc2VydmVycy5cbiAgdGltZWZyYW1lPzogQ29tcG9uZW50VGltZWZyYW1lIHwgbnVsbDtcbiAgLy8gVGhlIGN1cnJlbnQgYW5kIHByaW9yIHdpbmRvd3Mgb2YgYSBjb21wb25lbnQgd2hvc2UgbWVhc3VyZXMgY29tcGFyZVxuICAvLyBhZ2FpbnN0IGFuIGVhcmxpZXIgcGVyaW9kLiBBYnNlbnQgd2hlbiBubyBtZWFzdXJlIGNvbXBhcmVzLiBTZW50IG9uIGV2ZXJ5XG4gIC8vIGxpc3QgcGFnZSBhbmQgb24gY2hhcnQgYW5kIEtQSSBkYXRhLlxuICBjb21wYXJpc29uPzogQ29tcG9uZW50Q29tcGFyaXNvbiB8IG51bGw7XG4gIC8vIFdoYXQgZWFjaCBjb21wYXJlZCwgd2luZG93ZWQsIHJhbmtlZCBvciBzaGFyZWQgb3V0cHV0IGNvbHVtbiBpcywgYnkgYWxpYXMuXG4gIC8vIFBsYWluIG1lYXN1cmUgY29sdW1ucyBhcmUgbGVmdCBvdXQuXG4gIG91dHB1dHM/OiBSZWNvcmQ8c3RyaW5nLCBPdXRwdXRNZXRhPjtcbiAgLy8gQSBjcm9zcy10YWIgb25seTogdGhlIG1lYXN1cmUgYWxpYXMgZWFjaCBwaXZvdCBjZWxsIGNvbHVtbiBob2xkcywgc28gYVxuICAvLyBjZWxsIHRha2VzIGl0cyBtZWFzdXJlJ3Mgb3V0cHV0IG1lYW5pbmcuIE5ldmVyIHNlbnQgZm9yIGEgc3FsLW1vZGUgbGlzdC5cbiAgY2VsbE1lYXN1cmVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLy8gSG93IGVhY2ggd2luZG93ZWQgb3V0cHV0IGNvbHVtbiAocnVubmluZywgdG8tZGF0ZSBvciByb2xsaW5nKSB3YXNcbiAgLy8gY29tcHV0ZWQsIGJ5IGFsaWFzLlxuICB3aW5kb3dzPzogUmVjb3JkPHN0cmluZywgV2luZG93TWV0YT47XG4gIC8vIEEgS1BJIHdpdGggYSBjb21wYXJpc29uLCBhIHRhcmdldCBvciBhIHNwYXJrbGluZTogZXZlcnkgbnVtYmVyIHRoZSBjYXJkXG4gIC8vIHNob3dzIGJlc2lkZSBpdHMgdmFsdWUsIGRlY2lkZWQgYnkgdGhlIHNlcnZlci5cbiAga3BpPzogQ29tcG9uZW50S3BpIHwgbnVsbDtcbiAgLy8gVGhlIHRpbWUtYXhpcyB2YWx1ZSBvZiB0aGUgYnVja2V0IGNvbnRhaW5pbmcgdG9kYXksIHdyaXR0ZW4gYXMgdGhlIHJvd3NcbiAgLy8gd3JpdGUgaXQsIHdoZW4gdGhhdCBidWNrZXQgaXMgbm90IGZpbmlzaGVkIHlldDsgbnVsbCBvdGhlcndpc2UuIEEgY2hhcnRcbiAgLy8gbWFya3MgaXQgYXMgcGFydGlhbC5cbiAgcGFydGlhbFBlcmlvZD86IHN0cmluZyB8IG51bGw7XG4gIC8vIFdoaWNoIGZpbHRlcnMgdGhlIHJlYWQgYXBwbGllZC4gQWJzZW50IGZyb20gb2xkZXIgc2VydmVycy5cbiAgYXBwbGllZD86IENvbXBvbmVudERhdGFBcHBsaWVkO1xuICAvLyBBIGRyaWxsYWJsZSBjaGFydCdzIGRyaWxsIHN0YXRlLiBBYnNlbnQgb24gZXZlcnkgb3RoZXIgdGlsZSBhbmQgZnJvbVxuICAvLyBvbGRlciBzZXJ2ZXJzLlxuICBkcmlsbD86IENvbXBvbmVudERhdGFEcmlsbDtcbn1cblxuLy8gV2hlcmUgYSBjb21wb25lbnQncyB0aW1lZnJhbWUgd2luZG93IGNhbWUgZnJvbTogYSB2aWV3ZXIgZGF0ZVJhbmdlIGJvdW5kIHRvXG4vLyB0aGUgdGltZWZyYW1lIGNvbHVtbiAod2hpY2ggcmVwbGFjZXMgdGhlIGF1dGhvcmVkIHJhbmdlLCBuZXZlciBuYXJyb3dzXG4vLyBpdCksIHRoZSBhdXRob3JlZCByZWxhdGl2ZSByYW5nZSwgdGhlIGF1dGhvcmVkIGZpeGVkIGRheXMsIG9yIG5vdGhpbmcgKGFuXG4vLyBvcGVuIHdpbmRvdykuXG5leHBvcnQgdHlwZSBUaW1lZnJhbWVTb3VyY2UgPSAnZmlsdGVyJyB8ICdyYW5nZScgfCAnZml4ZWQnIHwgJ25vbmUnO1xuXG4vLyBUaGUgd2luZG93IGEgY29tcG9uZW50J3MgdGltZWZyYW1lIHJlc29sdmVkIHRvLiBzdGFydCBhbmQgZW5kIGFyZVxuLy8gaW5jbHVzaXZlICd5eXl5LU1NLWRkJyBkYXlzIGluIHRoZSByZXBvcnQncyB6b25lLCB3cml0dGVuIHdpdGhvdXQgYSB6b25lLlxuLy8gdGhyb3VnaCBpcyB0aGUgVVRDICd5eXl5LU1NLWRkIEhIOm1tOnNzJyBpbnN0YW50IGEgd2luZG93IG9uIGEgZGF0ZXRpbWVcbi8vIGNvbHVtbiBpcyBjdXQgYXQ7IGl0IHJlYWRzIGFzIGEgdGltZSBpbiB0aGUgcmVwb3J0IHpvbmUuIEl0IGlzIHNldCBvbmx5IHdoZW5cbi8vIGEgY29tcGFyaXNvbiBjdXRzIGEgd2luZG93IHRoYXQgZW5kcyB0b2RheTogYSB0aW1lZnJhbWUgb24gaXRzIG93biByZWFkc1xuLy8gd2hvbGUgZGF5cywgc28gYSB3aW5kb3cgZW5kaW5nIHRvZGF5IHdpdGhvdXQgYSBjb21wYXJpc29uIHNlbmRzIG51bGwuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudFRpbWVmcmFtZSB7XG4gIGNvbHVtbjogc3RyaW5nO1xuICBzdGFydDogc3RyaW5nIHwgbnVsbDtcbiAgZW5kOiBzdHJpbmcgfCBudWxsO1xuICB0aHJvdWdoOiBzdHJpbmcgfCBudWxsO1xuICByYW5nZTogUmVwb3J0UmVsYXRpdmVSYW5nZSB8IG51bGw7XG4gIHNvdXJjZTogVGltZWZyYW1lU291cmNlO1xufVxuXG4vLyBIb3cgYSBjb21wYXJpc29uIGlzIGxhaWQgb3V0OiBvbmUgdmFsdWUgcGVyIHdpbmRvdyAocmFuZ2UpLCBhIHByaW9yIHNlcmllc1xuLy8gYmVzaWRlIGEgdGltZSBheGlzIChzZXJpZXMpLCBvciBlYWNoIHBlcmlvZCdzIHZhbHVlIHJlYWQgYXQgaXRzIGVuZCwgc2V0XG4vLyBhZ2FpbnN0IHRoZSB2YWx1ZSBhdCB0aGUgZW5kIG9mIGFuIGVhcmxpZXIgcGVyaW9kIChwZXJpb2RfZW5kKS5cbmV4cG9ydCB0eXBlIENvbXBhcmlzb25Nb2RlID0gJ3JhbmdlJyB8ICdzZXJpZXMnIHwgJ3BlcmlvZF9lbmQnO1xuXG4vLyB0b19kYXRlIGNvbXBhcmVzIGxpa2Ugd2l0aCBsaWtlICh0aGUgZmlyc3QgMiBkYXlzIG9mIGEgbW9udGggYWdhaW5zdCB0aGVcbi8vIGZpcnN0IDIgZGF5cyBvZiB0aGUgb25lIGJlZm9yZSk7IGZ1bGwgY29tcGFyZXMgd2hvbGUgcGVyaW9kcy5cbmV4cG9ydCB0eXBlIENvbXBhcmlzb25BbGlnbiA9ICd0b19kYXRlJyB8ICdmdWxsJztcblxuLy8gV2hhdCBhIG1lYXN1cmUgaXMgY29tcGFyZWQgYWdhaW5zdC4gTWlycm9ycyB0aGUgc2VydmVyJ3Ncbi8vIENvbXBhcmlzb25BZ2FpbnN0RW51bSB2YWx1ZSBmb3IgdmFsdWUuXG5leHBvcnQgdHlwZSBDb21wYXJpc29uQWdhaW5zdCA9XG4gIHwgJ3ByZXZpb3VzX3BlcmlvZCdcbiAgfCAncHJldmlvdXNfd2VlaydcbiAgfCAncHJldmlvdXNfbW9udGgnXG4gIHwgJ3ByZXZpb3VzX3F1YXJ0ZXInXG4gIHwgJ3ByZXZpb3VzX3llYXInXG4gIHwgJ3JhbmdlJztcblxuLy8gV2h5IGEgY29tcGFyaXNvbiByZWFkcyBhcyBpdCBkb2VzLiBUaGUgc2VydmVyIHNlbmRzIGNvZGVzLCBuZXZlclxuLy8gc2VudGVuY2VzOyB0aGUgdmlld2VyIHdvcmRzIHRoZW0uXG4vLyAtIG5vX3dpbmRvdzogbm8gZGF0ZSByYW5nZSB0byBjb21wYXJlIHlldDtcbi8vIC0gdW5pdF9pbmZlcnJlZDogdGhlIHBlcmlvZCB1bml0IHdhcyBpbmZlcnJlZCBmcm9tIHRoZSBkYXlzLCBub3QgbmFtZWQ7XG4vLyAtIHdpbmRvd19pbl9mdXR1cmU6IHRoZSB3aW5kb3cgc3RhcnRzIGFmdGVyIHRvZGF5O1xuLy8gLSBvdGhlcl9kYXRlX2ZpbHRlcjogYSBkYXRlIGZpbHRlciBvbiBhbm90aGVyIGNvbHVtbiBhbHNvIGFwcGxpZXM7XG4vLyAtIGdyYWluX2ZvbGxvd2VkOiB0aGUgcHJpb3IgZm9sbG93cyB0aGUgZ3JvdXAtYnkgZ3JhaW4gcGlja2VkIG9uIHRoZSByZXBvcnQuXG5leHBvcnQgdHlwZSBDb21wYXJpc29uTm90ZUNvZGUgPVxuICB8ICdub193aW5kb3cnXG4gIHwgJ3VuaXRfaW5mZXJyZWQnXG4gIHwgJ3dpbmRvd19pbl9mdXR1cmUnXG4gIHwgJ290aGVyX2RhdGVfZmlsdGVyJ1xuICB8ICdncmFpbl9mb2xsb3dlZCc7XG5cbi8vIE9uZSBjb21wYXJpc29uIHdpbmRvdzogaW5jbHVzaXZlICd5eXl5LU1NLWRkJyBkYXlzIGluIHRoZSByZXBvcnQncyB6b25lLFxuLy8gYW5kIHRoZSBVVEMgaW5zdGFudCBpdCBpcyBjdXQgYXQgd2hlbiBpdCBlbmRzIHRvZGF5IG9uIGEgZGF0ZXRpbWUgY29sdW1uLlxuLy8gSW4gc2VyaWVzIG1vZGUgaXQgaXMgdGhlIHNwYW4gdGhlIGNoYXJ0IHNob3dzLlxuZXhwb3J0IGludGVyZmFjZSBDb21wYXJpc29uV2luZG93IHtcbiAgc3RhcnQ6IHN0cmluZztcbiAgZW5kOiBzdHJpbmc7XG4gIHRocm91Z2g6IHN0cmluZyB8IG51bGw7XG59XG5cbi8vIEhvdyBmYXIgYmFjayBvbmUgcHJpb3IgbGFuZSBzaXRzLiBBIGN1c3RvbSByYW5nZSBoYXMgbm8gdW5pdCBvciBjb3VudCwgYW5kXG4vLyBuZWl0aGVyIGRvZXMgcHJldmlvdXNfcGVyaW9kIHdoZW4gdGhlcmUgaXMgbm8gY3VycmVudCB3aW5kb3cgdG8gbWVhc3VyZVxuLy8gKG5vX3dpbmRvdywgd2luZG93X2luX2Z1dHVyZSk7IGEgc2hpZnQgYnkgdGhlIHdpbmRvdydzIGxlbmd0aCBpcyB1bml0IGRheVxuLy8gd2l0aCB0aGUgbGVuZ3RoIGFzIHRoZSBjb3VudDsgYSBwcmV2aW91cyB5ZWFyIGlzIDM2NCBkYXlzIG9uIGEgZGF5IGF4aXMgYW5kXG4vLyA1MiB3ZWVrcyBvbiBhIHdlZWsgYXhpcy5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGFyaXNvbk9mZnNldCB7XG4gIGFnYWluc3Q6IENvbXBhcmlzb25BZ2FpbnN0O1xuICB1bml0OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbDtcbiAgY291bnQ6IG51bWJlciB8IG51bGw7XG59XG5cbi8vIEEgY29tcG9uZW50J3MgY29tcGFyaXNvbjogdGhlIHpvbmUgaXRzIGRheXMgYXJlIGluLCB0aGUgY3VycmVudCB3aW5kb3dcbi8vIChudWxsIHdoZW4gdGhlcmUgaXMgbm8gd2luZG93IHRvIGNvbXBhcmUgeWV0LCBvciB3aGVuIGEgdGltZSBheGlzIHJ1bnNcbi8vIG92ZXIgYWxsIHRoZSBkYXRhLCB3aGljaCBoYXMgbm8gZmlyc3QgZGF5IHRvIG5hbWUpIGFuZCB1cCB0byAyIHByaW9yXG4vLyBsYW5lczogb2Zmc2V0c1tpXSBkZXNjcmliZXMgbGFuZSBpICsgMSwgYW5kIHByaW9yc1tpXSBpdHMgd2luZG93LiBXaXRoIG5vXG4vLyBjdXJyZW50IHdpbmRvdyBwcmlvcnMgaXMgZW1wdHksIHdoaWxlIG9mZnNldHMgc3RpbGwgbmFtZXMgZXZlcnkgbGFuZS5cbi8vIGZsb29yIGlzIHRoZSAneXl5eS1NTS1kZCcgZGF5IG9mIHRoZSBmaXJzdCByb3cgdGhlIHF1ZXJ5J3Mgb3duIGNvbmRpdGlvbnNcbi8vIGtlZXAgKHZpZXdlciBmaWx0ZXJzIGFzaWRlKTogYSBwcmlvciB3aW5kb3cgd2hvbGx5IGJlZm9yZSBpdCBoYXMgbm8gZGF0YVxuLy8gcmF0aGVyIHRoYW4gYSB6ZXJvLlxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRDb21wYXJpc29uIHtcbiAgbW9kZTogQ29tcGFyaXNvbk1vZGU7XG4gIHRpbWV6b25lOiBzdHJpbmc7XG4gIGFsaWduOiBDb21wYXJpc29uQWxpZ247XG4gIGN1cnJlbnQ6IENvbXBhcmlzb25XaW5kb3cgfCBudWxsO1xuICBwcmlvcnM6IENvbXBhcmlzb25XaW5kb3dbXTtcbiAgb2Zmc2V0czogQ29tcGFyaXNvbk9mZnNldFtdO1xuICBmbG9vcjogc3RyaW5nIHwgbnVsbDtcbiAgbm90ZXM6IENvbXBhcmlzb25Ob3RlQ29kZVtdO1xufVxuXG4vLyBXaGF0IGFuIG91dHB1dCBjb2x1bW4gaG9sZHM6IGEgbWVhc3VyZSdzIHZhbHVlLCBpdHMgcmFuayBvciBpdHMgc2hhcmUuXG5leHBvcnQgdHlwZSBPdXRwdXRLaW5kID0gJ3ZhbHVlJyB8ICdyYW5rJyB8ICdzaGFyZSc7XG5cbi8vIFdoaWNoIHNpZGUgb2YgYSBjb21wYXJpc29uIGFuIG91dHB1dCBjb2x1bW4gaXM6IHRoZSBjdXJyZW50IHZhbHVlLCB0aGVcbi8vIHByaW9yIG9uZSwgdGhlaXIgZGlmZmVyZW5jZSwgb3IgdGhlIGRpZmZlcmVuY2UgYXMgYSAwLTEgZnJhY3Rpb24gb2YgdGhlXG4vLyBwcmlvci4gbnVsbCBmb3IgYW4gb3V0cHV0IHRoYXQgaXMgbm90IGNvbXBhcmVkLlxuZXhwb3J0IHR5cGUgT3V0cHV0Um9sZSA9ICdjdXJyZW50JyB8ICdwcmlvcicgfCAnY2hhbmdlJyB8ICdwZXJjZW50X2NoYW5nZSc7XG5cbi8vIEhvdyB0aWVkIHZhbHVlcyByYW5rOiAxLCAxLCAzIChjb21wZXRpdGlvbikgb3IgMSwgMSwgMiAoZGVuc2UpLlxuZXhwb3J0IHR5cGUgT3V0cHV0UmFua01ldGhvZCA9ICdjb21wZXRpdGlvbicgfCAnZGVuc2UnO1xuXG4vLyBBIHJhbmsgb3V0cHV0OiBob3cgdGllcyByYW5rLCB3aGljaCBlbmQgcmFua3MgMSAoZGVzYzogdGhlIGxhcmdlc3QpLCBhbmRcbi8vIHRoZSBkaW1lbnNpb24gb3V0cHV0cyBpdCByZXN0YXJ0cyB3aXRoaW4gKG5vbmU6IHRoZSB3aG9sZSByZXN1bHQpLlxuZXhwb3J0IGludGVyZmFjZSBPdXRwdXRSYW5rIHtcbiAgbWV0aG9kOiBPdXRwdXRSYW5rTWV0aG9kO1xuICBkaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnO1xuICB3aXRoaW46IHN0cmluZ1tdO1xufVxuXG4vLyBBIHNoYXJlIG91dHB1dDogdGhlIGRpbWVuc2lvbiBvdXRwdXRzIHdob3NlIHRvdGFsIGl0IGlzIGEgc2hhcmUgb2YgKG5vbmU6XG4vLyB0aGUgd2hvbGUgcmVzdWx0KS5cbmV4cG9ydCBpbnRlcmZhY2UgT3V0cHV0U2hhcmUge1xuICB3aXRoaW46IHN0cmluZ1tdO1xufVxuXG4vLyBUaGUgbWVhbmluZyBvZiBvbmUgY29tcGFyZWQsIHdpbmRvd2VkLCByYW5rZWQgb3Igc2hhcmVkIG91dHB1dCBjb2x1bW4uXG4vLyBtZWFzdXJlIGlzIHRoZSBzb3VyY2UgbWVhc3VyZSdzIGFsaWFzLCB3aG9zZSBmb3JtYXQgdGhlIGNvbHVtbiBpbmhlcml0cztcbi8vIG9mZnNldCBpcyB0aGUgcHJpb3IgbGFuZSBhIHByaW9yLCBjaGFuZ2Ugb3IgcGVyY2VudCBjaGFuZ2UgYmVsb25ncyB0byAoaXRzXG4vLyB3aW5kb3cgaXMgY29tcGFyaXNvbi5wcmlvcnNbb2Zmc2V0IC0gMV0pLiBVbmxlc3MgdGhlIGNvbmZpZyBmb3JtYXRzIGl0LCBhXG4vLyBzaGFyZSBwcmludHMgYXMgYSBwZXJjZW50IHRvIDEgZGVjaW1hbCBhbmQgYSByYW5rIGFzIGEgd2hvbGUgbnVtYmVyLlxuZXhwb3J0IGludGVyZmFjZSBPdXRwdXRNZXRhIHtcbiAgbWVhc3VyZTogc3RyaW5nO1xuICBraW5kOiBPdXRwdXRLaW5kO1xuICByb2xlOiBPdXRwdXRSb2xlIHwgbnVsbDtcbiAgb2Zmc2V0OiBudW1iZXIgfCBudWxsO1xuICB3aW5kb3c6IGJvb2xlYW47XG4gIHJhbms6IE91dHB1dFJhbmsgfCBudWxsO1xuICBzaGFyZTogT3V0cHV0U2hhcmUgfCBudWxsO1xufVxuXG4vLyBBIHdpbmRvdyBvdmVyIHRoZSByb3dzOiBhIHJ1bm5pbmcgdG90YWwsIGEgdG90YWwgdG8gZGF0ZSB3aXRoaW4gZWFjaFxuLy8gcGVyaW9kIChtb250aCB0byBkYXRlKSwgb3IgYSByb2xsaW5nIHNwYW4gb2YgcGVyaW9kcy5cbmV4cG9ydCB0eXBlIFdpbmRvd0tpbmQgPSAncnVubmluZycgfCAndG9fZGF0ZScgfCAncm9sbGluZyc7XG5cbi8vIFdoeSBhIHdpbmRvdyByZWFkcyBhcyBpdCBkb2VzLiBDb2RlcyBvbmx5OyB0aGUgdmlld2VyIHdvcmRzIHRoZW0uXG5leHBvcnQgdHlwZSBXaW5kb3dOb3RlQ29kZSA9XG4gIHwgJ3NuYXBwZWRfc3RhcnQnXG4gIHwgJ3NwYW5fY29udmVydGVkJ1xuICB8ICdncmFpbl90b29fY29hcnNlJ1xuICB8ICdlcXVhbF9ncmFpbl9wbGFpbidcbiAgfCAnb3duX2ZpbHRlcl9jYXBzX2xlYWRfaW4nXG4gIHwgJ3dlZWtfYnlfbW9uZGF5J1xuICB8ICdpbmNvbXBsZXRlX2hlYWQnO1xuXG4vLyBIb3cgb25lIHdpbmRvd2VkIG91dHB1dCBjb2x1bW4gd2FzIGNvbXB1dGVkLiBwZXJpb2RzIGFuZCB1bml0IHNpemUgYVxuLy8gcm9sbGluZyB3aW5kb3cgKGRyYXduUGVyaW9kcyBpcyB0aGF0IHNwYW4gY291bnRlZCBpbiB0aGUgZ3JhaW4gdGhlIHJvd3Ncbi8vIGFyZSBkcmF3biBhdCk7IHJlc2V0RXZlcnkgcmVzdGFydHMgYSB0by1kYXRlIHdpbmRvdzsgYXZlcmFnZSBtYWtlcyB0aGVcbi8vIHdpbmRvdyBhbiBhdmVyYWdlIHJhdGhlciB0aGFuIGEgdG90YWw7IGZyb21CZWdpbm5pbmdcbi8vIHJ1bnMgYSB0b3RhbCBmcm9tIHRoZSBmaXJzdCByb3cgZXZlciByYXRoZXIgdGhhbiBmcm9tIHRoZSBmaXJzdCByb3cgc2hvd24uXG4vLyBzdGFydCwgZW5kIGFuZCBsZWFkSW4gYXJlICd5eXl5LU1NLWRkJyByZXBvcnQtem9uZSBkYXlzOiB0aGUgcm93cyBzaG93bixcbi8vIGFuZCB0aGUgZWFybGllciBkYXkgdGhlIHdpbmRvdyByZWFkcyBmcm9tIHNvIGl0cyBmaXJzdCByb3dzIGFyZSB3aG9sZS5cbi8vIGRlc2NyaXB0aW9uIGlzIHRoZSBzZXJ2ZXIncyBFbmdsaXNoIGZvciB0aGUgYWdlbnQgYW5kIHRoZSBleHBvcnRzOyB0aGVcbi8vIHZpZXdlciBjb21wb3NlcyBpdHMgb3duIHdvcmRzIGZyb20gdGhlIGZpZWxkcy5cbmV4cG9ydCBpbnRlcmZhY2UgV2luZG93TWV0YSB7XG4gIGtpbmQ6IFdpbmRvd0tpbmQ7XG4gIHBlcmlvZHM6IG51bWJlciB8IG51bGw7XG4gIHVuaXQ6IENoYXJ0R3JhbnVsYXJpdHkgfCBudWxsO1xuICBkcmF3blBlcmlvZHM6IG51bWJlciB8IG51bGw7XG4gIHJlc2V0RXZlcnk6IENoYXJ0R3JhbnVsYXJpdHkgfCBudWxsO1xuICBhdmVyYWdlOiBib29sZWFuO1xuICBmcm9tQmVnaW5uaW5nOiBib29sZWFuO1xuICBkYXRlQ29sdW1uOiBzdHJpbmcgfCBudWxsO1xuICBzdGFydDogc3RyaW5nIHwgbnVsbDtcbiAgZW5kOiBzdHJpbmcgfCBudWxsO1xuICBsZWFkSW46IHN0cmluZyB8IG51bGw7XG4gIG5vdGVzOiBXaW5kb3dOb3RlQ29kZVtdO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xufVxuXG4vLyBXaGljaCBkZWx0YSBhIEtQSSBjYXJkIHNob3dzOiB0aGUgZGlmZmVyZW5jZSwgb3IgdGhlIHBlcmNlbnQgY2hhbmdlLlxuZXhwb3J0IHR5cGUgS3BpRGVsdGFTaG93ID0gJ2NoYW5nZScgfCAncGVyY2VudF9jaGFuZ2UnO1xuXG4vLyBXaHkgYSBLUEkncyBkZWx0YSByZWFkcyBhcyBpdCBkb2VzOlxuLy8gLSBub19wcmlvcl9kYXRhOiB0aGUgcHJpb3Igd2luZG93IGhhcyBubyB2YWx1ZTtcbi8vIC0gdXBfZnJvbV96ZXJvOiB0aGUgcHJpb3Igd2FzIDAsIHNvIHRoZXJlIGlzIG5vIHBlcmNlbnQgY2hhbmdlO1xuLy8gLSBub19jaGFuZ2U6IGJvdGggYXJlIDA7XG4vLyAtIG5vX2RhdGFfZWl0aGVyOiBuZWl0aGVyIHdpbmRvdyBoYXMgYSB2YWx1ZTtcbi8vIC0gc2lnbl9jaGFuZ2U6IHRoZSB2YWx1ZSBjcm9zc2VkIHplcm8sIHNvIHRoZXJlIGlzIG5vIHBlcmNlbnQgY2hhbmdlLlxuZXhwb3J0IHR5cGUgS3BpTm90ZUNvZGUgPVxuICB8ICdub19wcmlvcl9kYXRhJ1xuICB8ICd1cF9mcm9tX3plcm8nXG4gIHwgJ25vX2NoYW5nZSdcbiAgfCAnbm9fZGF0YV9laXRoZXInXG4gIHwgJ3NpZ25fY2hhbmdlJztcblxuLy8gQSBLUEkncyBwcm9ncmVzcyB0b3dhcmQgaXRzIGNvbmZpZ3VyZWQgdGFyZ2V0LiBwcm9ncmVzcyBpcyB2YWx1ZSAvIHRhcmdldFxuLy8gKG51bGwgd2hlbiB0aGUgdGFyZ2V0IGlzIDApOyBtZXQgZm9sbG93cyB0aGUgY29uZmlnJ3MgaW5jcmVhc2VJcyAobnVsbFxuLy8gd2hlbiBpdCBpcyBuZXV0cmFsKS5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50S3BpVGFyZ2V0IHtcbiAgdmFsdWU6IG51bWJlcjtcbiAgbGFiZWw6IHN0cmluZyB8IG51bGw7XG4gIHByb2dyZXNzOiBudW1iZXIgfCBudWxsO1xuICBtZXQ6IGJvb2xlYW4gfCBudWxsO1xufVxuXG4vLyBPbmUgc3BhcmtsaW5lIHBvaW50OiB0aGUgcGVyaW9kLCB3cml0dGVuIGFzIGEgdGltZS1heGlzIHZhbHVlLCBhbmQgdGhlXG4vLyB2YWx1ZSBpbiBpdCAobnVsbCB3aGVuIGEgbm9uLWFkZGl0aXZlIG1lYXN1cmUgaGFzIG5vIHJvd3MgdGhlcmUpLlxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRLcGlTcGFya2xpbmVQb2ludCB7XG4gIHBlcmlvZDogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyIHwgbnVsbDtcbn1cblxuLy8gQSBLUEkncyBzcGFya2xpbmUgcG9pbnRzLCBvbGRlc3QgZmlyc3QuIHBhcnRpYWwgc2F5cyB0aGUgbGFzdCBwZXJpb2QgaXNcbi8vIG5vdCBmaW5pc2hlZCB5ZXQuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudEtwaVNwYXJrbGluZSB7XG4gIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5O1xuICBwYXJ0aWFsOiBib29sZWFuO1xuICBwb2ludHM6IENvbXBvbmVudEtwaVNwYXJrbGluZVBvaW50W107XG59XG5cbi8vIEV2ZXJ5IG51bWJlciBhIEtQSSBjYXJkIHNob3dzIGJlc2lkZSBpdHMgdmFsdWUuIHNob3cgbmFtZXMgdGhlIGRlbHRhIHRvXG4vLyBwcmludCwgZGVjaWRlZCBieSB0aGUgc2VydmVyLiBXaGVuIHZhbHVlIGlzIG51bGwgdGhlIGNhcmQgc2hvd3MgYSBkYXNoIGFuZFxuLy8gbm8gY29tcGFyaXNvbi5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50S3BpIHtcbiAgdmFsdWU6IG51bWJlciB8IG51bGw7XG4gIHByaW9yOiBudW1iZXIgfCBudWxsO1xuICBjaGFuZ2U6IG51bWJlciB8IG51bGw7XG4gIHBlcmNlbnRDaGFuZ2U6IG51bWJlciB8IG51bGw7XG4gIHNob3c6IEtwaURlbHRhU2hvdztcbiAgbm90ZTogS3BpTm90ZUNvZGUgfCBudWxsO1xuICB0YXJnZXQ6IENvbXBvbmVudEtwaVRhcmdldCB8IG51bGw7XG4gIHNwYXJrbGluZTogQ29tcG9uZW50S3BpU3BhcmtsaW5lIHwgbnVsbDtcbn1cblxuLy8gQSBjb21wb25lbnQncyBDU1YgZXhwb3J0OiB0aGUgcHJlc2lnbmVkIGRvd25sb2FkIFVSTCwgcGx1cyBvbmUgc2VudGVuY2UgcGVyXG4vLyB3YXkgdGhlIGZpbGUgZmFsbHMgc2hvcnQgb2YgdGhlIGZ1bGwgcmVzdWx0IChjdXQgYXQgdGhlIGV4cG9ydCBjZWlsaW5nLCBvclxuLy8gY3V0IGFzIHRoZSBjaGFydCBpdHNlbGYgaXMpLiBFbXB0eSB3aGVuIHRoZSBmaWxlIGlzIGNvbXBsZXRlLiBPcHRpb25hbFxuLy8gYmVjYXVzZSBhIHNlcnZlciBvbiBhbiBvbGRlciBmcmFtZXdvcmsgYW5zd2VycyB3aXRoIHRoZSB1cmwgYWxvbmUuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudEV4cG9ydFJlc3BvbnNlIHtcbiAgdXJsOiBzdHJpbmc7XG4gIG5vdGVzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0TGlzdEl0ZW0ge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIG1vZGlmeURhdGU6IHN0cmluZztcbiAgc3RhdGU/OiBSZXBvcnRTdGF0ZTtcbiAgLy8gVGhlIGZvbGRlciB0aGUgcmVwb3J0IGlzIGZpbGVkIHVuZGVyLiBudWxsIGlzIGEgcmVhbCwgY29tbW9uIHZhbHVlIOKAlCB0aGVcbiAgLy8gcmVwb3J0IHNpdHMgYXQgdGhlIHJvb3Qgb2YgdGhlIGxpc3RpbmcgdHJlZSBhbG9uZ3NpZGUgdGhlIGZvbGRlcnMuXG4gIC8vXG4gIC8vIE9wdGlvbmFsIGxpa2UgYHN0YXRlYCBiZXNpZGUgaXQ6IHRoZSBiYWNrZW5kIGFsd2F5cyBzZW5kcyBpdCwgYnV0IG1ha2luZyBpdFxuICAvLyByZXF1aXJlZCBpcyBhIGJyZWFraW5nIHR5cGUgY2hhbmdlIGZvciBldmVyeSBjb25zdW1lciBob2xkaW5nIGFcbiAgLy8gUmVwb3J0TGlzdEl0ZW0gbGl0ZXJhbCAoZml4dHVyZXMsIG1vY2tzKSBhbmQgYnV5cyBub3RoaW5nIOKAlCB0aGUgbGlzdGluZ1xuICAvLyByZWFkcyBpdCBhcyBgPz8gbnVsbGAgZWl0aGVyIHdheS5cbiAgcmVwb3J0Rm9sZGVySWQ/OiBudW1iZXIgfCBudWxsO1xufVxuXG4vLyBPbmUgZm9sZGVyIGluIHRoZSBsaXN0aW5nIHRyZWUg4oCUIGFuIGF1ZGllbmNlIGJ1Y2tldCAoXCJNYW5hZ2VtZW50XCIsXG4vLyBcIk9wZXJhdGlvbnNcIikgcmVwb3J0cyBhcmUgZmlsZWQgaW50by4gRm9sZGVycyBuZXN0IHZpYSBwYXJlbnRSZXBvcnRGb2xkZXJJZDtcbi8vIHJlcG9ydHMgbmV2ZXIgZG8sIHNvIHRoZSB0cmVlJ3Mgb25seSBicmFuY2ggbm9kZXMgYXJlIGZvbGRlcnMuXG4vL1xuLy8gYHN0YXRlYCBpcyB0aGUgZm9sZGVyJ3MgT1dOIHN0YXRlLiBEZWxldGluZyBhIGZvbGRlciB3cml0ZXMgb25seSB0aGF0LCBhbmRcbi8vIGV2ZXJ5dGhpbmcgYmVsb3cgaXQgY291bnRzIGFzIGRlbGV0ZWQgYnkgcG9zaXRpb24g4oCUIHNlZSBSZXBvcnROb2RlLmRlbGV0ZWQuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEZvbGRlciB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgcGFyZW50UmVwb3J0Rm9sZGVySWQ6IG51bWJlciB8IG51bGw7XG4gIHN0YXRlPzogUmVwb3J0U3RhdGU7XG59XG5cbi8vIEdFVCAvYXBpL3JlcG9ydHMgcmV0dXJucyBib3RoIGhhbHZlcyBmbGF0OyB0aGUgbGlzdGluZyBuZXN0cyB0aGVtIGl0c2VsZi5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0VHJlZSB7XG4gIHJlcG9ydHM6IFJlcG9ydExpc3RJdGVtW107XG4gIGZvbGRlcnM6IFJlcG9ydEZvbGRlcltdO1xufVxuXG5leHBvcnQgZW51bSBSZXBvcnROb2RlVHlwZSB7XG4gIEZvbGRlciA9ICdmb2xkZXInLFxuICBSZXBvcnQgPSAncmVwb3J0Jyxcbn1cblxuLy8gT25lIG5vZGUgYXMgZnMtdHJlZSBzZWVzIGl0LiBGb2xkZXJzIGFuZCByZXBvcnRzIHNoYXJlIG9uZSBpZCBzcGFjZSBpbiB0aGVcbi8vIHZpZXcsIHNvIHRoZSBpZHMgYXJlIHByZWZpeGVkICgnZjoxMicgLyAncjozNCcpIOKAlCBgaWRgIGlzIHRoZSBvcmlnaW5hbCxcbi8vIHBlci10YWJsZSBpZCB0aGF0IHRoZSBBUEkgZW5kcG9pbnRzIHRha2UuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydE5vZGUge1xuICBrZXk6IHN0cmluZztcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBSZXBvcnROb2RlVHlwZTtcbiAgLy8gT25seSBldmVyIHBvcHVsYXRlZCBvbiBhIGZvbGRlcjsgYSByZXBvcnQgaXMgYWx3YXlzIGEgbGVhZi5cbiAgY2hpbGRyZW46IFJlcG9ydE5vZGVbXTtcbiAgLy8gUHJlc2VudCBvbiByZXBvcnQgbm9kZXMgb25seS5cbiAgcmVwb3J0PzogUmVwb3J0TGlzdEl0ZW07XG4gIC8vIFRoZSBub2RlJ3Mgb3duIHJvdyBpcyBkZWxldGVkLiBXaGF0IGVhcm5zIHRoZSBcIkRlbGV0ZWRcIiBjaGlwIOKAlCB0aGlzIGlzXG4gIC8vIHdoYXQgc29tZWJvZHkgYWN0dWFsbHkgZGVsZXRlZC5cbiAgc3RhdGVEZWxldGVkOiBib29sZWFuO1xuICAvLyBEZWxldGVkIGl0c2VsZiBPUiBhbnl3aGVyZSBiZWxvdyBhIGRlbGV0ZWQgZm9sZGVyLiBPbmx5IGV2ZXIgdHJ1ZSBpbiBTaG93XG4gIC8vIERlbGV0ZWQgbW9kZSAodGhlIGRlZmF1bHQgbGlzdGluZyBuZXZlciByZXR1cm5zIHN1Y2ggYSBub2RlKSwgYW5kIGl0IGlzIHdoYXRcbiAgLy8gc3dhcHMgdGhlIHJvdydzIGFjdGlvbnMgZm9yIFJlc3RvcmUuXG4gIGRlbGV0ZWQ6IGJvb2xlYW47XG59XG5cbi8vIFJlcG9ydHMgYW5kIGZvbGRlcnMgYXJlIGJvdGggc29mdC1kZWxldGFibGUuIEEgZGVsZXRlZCByZXBvcnQga2VlcHMgaXRzIHBhZ2VzXG4vLyBhbmQgY29tcG9uZW50czsgYSBkZWxldGVkIGZvbGRlciBrZWVwcyBldmVyeXRoaW5nIGZpbGVkIHVuZGVyIGl0LCB3aGljaCBsZWF2ZXNcbi8vIHRoZSBsaXN0aW5nIHdpdGggaXQgYW5kIGNvbWVzIGJhY2sgd2l0aCBpdC4gXCJTaG93IERlbGV0ZWRcIiBzaG93cyB0aGUgd2hvbGVcbi8vIHRyZWUsIGxpdmUgYW5kIGRlbGV0ZWQgdG9nZXRoZXIsIHNvIGFueSBvZiBpdCBjYW4gYmUgcmVzdG9yZWQgaW4gcGxhY2UuXG5leHBvcnQgZW51bSBSZXBvcnRTdGF0ZSB7XG4gIEFjdGl2ZSA9ICdhY3RpdmUnLFxuICBEZWxldGVkID0gJ2RlbGV0ZWQnLFxufVxuXG4vLyBUaGUgY2hhdCB0dXJuIGZsYWdzIHRoaXMgY29udGV4dCdzIGJhY2tlbmQgYWRkcyAoUmVwb3J0c1xcQWlWaWV3KS5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Q2hhdFJlc3BvbnNlIHtcbiAgcmVwb3J0Q2hhbmdlZD86IGJvb2xlYW47XG4gIHJlcG9ydFJlbmFtZWQ/OiBib29sZWFuO1xufVxuXG4vLyBPbmUgdmVyc2lvbiBvZiB0aGUgZ2xvYmFsIEFJIGtub3dsZWRnZSBkb2N1bWVudCDigJQgdGhlIG9wZXJhdG9yLWF1dGhvcmVkXG4vLyBtYXJrZG93biBhcHBlbmRlZCB0byB0aGUgcmVwb3J0IGFnZW50J3Mgc3lzdGVtIGluc3RydWN0aW9ucyBvbiBldmVyeSB0dXJuLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRJbnN0cnVjdGlvbiB7XG4gIGlkOiBudW1iZXI7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgY3VycmVudDogYm9vbGVhbjtcbiAgY3JlYXRlRGF0ZTogRGF0ZTtcbiAgbW9kaWZ5RGF0ZTogRGF0ZTtcbiAgYWNjb3VudElkOiBudW1iZXIgfCBudWxsO1xuICBhY2NvdW50TmFtZTogc3RyaW5nIHwgbnVsbDtcbn1cblxuLy8gR0VUL1BVVCBpbnN0cnVjdGlvbnMgcGF5bG9hZDogdGhlIGN1cnJlbnQgdmVyc2lvbiAobnVsbCB1bnRpbCBvbmUgaXNcbi8vIGF1dGhvcmVkKSBwbHVzIHRoZSBmdWxsIGhpc3RvcnksIG5ld2VzdCBmaXJzdC5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0SW5zdHJ1Y3Rpb25zIHtcbiAgaW5zdHJ1Y3Rpb25zOiBSZXBvcnRJbnN0cnVjdGlvbiB8IG51bGw7XG4gIHZlcnNpb25zOiBSZXBvcnRJbnN0cnVjdGlvbltdO1xufVxuXG4vLyBUaGUgbGF0ZXN0IHNlbWFudGljLWRhdGFiYXNlIGJ1aWxkIChhbiBmZl9wcm9jZXNzZXMgcm93KSDigJQgZW5vdWdoIGZvciB0aGVcbi8vIHNldHRpbmdzIGRpYWxvZyB0byBzYXkgd2hhdCBzdGF0ZSB0aGUgYnVpbGQgaXMgaW4gYW5kIHdoZW4gaXQgbGFzdCByYW4uXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGQge1xuICBpZDogbnVtYmVyO1xuICBzdGF0ZTogc3RyaW5nO1xuICBwZXJjZW50OiBudW1iZXIgfCBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgZHVyYXRpb246IG51bWJlcjtcbiAgY3JlYXRlRGF0ZTogRGF0ZTtcbiAgc3RhcnREYXRlOiBEYXRlO1xuICBlbmREYXRlOiBEYXRlO1xufVxuXG4vLyBBIGJ1aWxkIHN0YWdlJ3Mgc3RhdGUgb24gdGhlIGVudGl0eSBzY29yZWJvYXJkOiAnZG9uZScgPSBidWlsdCwgJ21pc3NpbmcnID1cbi8vIHN0aWxsIG5lZWRzIGJ1aWxkaW5nIChhIG1pc3Npbmcgc3RhZ2UgaXMgdW5idWlsdCBjb250ZW50LCBuZXZlciBhbiBlcnJvcikuXG5leHBvcnQgdHlwZSBTZW1hbnRpY0J1aWxkU3RhZ2UgPSAnZG9uZScgfCAnbWlzc2luZyc7XG5cbi8vIE9uZSBlbnVtIGNvbHVtbiBvZiBhbiBlbnRpdHksIHdpdGggdGhlIGFsbG93ZWQgdmFsdWVzIHRoZSBidWlsZCBpbmxpbmVkLlxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0J1aWxkRW51bSB7XG4gIGNvbHVtbjogc3RyaW5nO1xuICB2YWx1ZXM6IHN0cmluZ1tdO1xufVxuXG4vLyBPbmUgZW50aXR5IHJvdyBvZiB0aGUgc2NvcmVib2FyZCAoYW4gZW50aXR5ID0gYSB0YWJsZSArIGEgbW9kZWwgKyBhXG4vLyBoYW5kbGVyKTogaXRzIHRhYmxlL3NoYXBlIGNvdW50cywgaW5saW5lZCBlbnVtIHZhbHVlcywgY29tcHV0ZWQgZmllbGRzLCBob3dcbi8vIG1hbnkgY29kZSBmdW5jdGlvbnMgd2VyZSBjYWNoZWQgKHNwbGl0IG1vZGVsIHZzIGhhbmRsZXIpLCBhbmQgdGhlIHBlci1zdGFnZVxuLy8gYnVpbHQvbWlzc2luZyBzdGF0ZS5cbi8vXG4vLyBgbW9kZWxgL2BoYW5kbGVyYCBhcmUgdGhlIGNsYXNzZXMgdGhlIGZ1bmN0aW9ucyB3ZXJlIHJlYWQgZnJvbSDigJQgd2hhdCBhXG4vLyByZWFkZXIgcmVjb2duaXplcyB0aGUgcm93IGJ5LCB3aGVyZSBga2V5YCBpcyB3aGF0IHRoZSByZXBvcnQgQUkgYWRkcmVzc2VzIGl0XG4vLyBieSBpbiBkZXNjcmliZV9lbnRpdHkgLyBjb21waWxlX3F1ZXJ5LlxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0J1aWxkRW50aXR5IHtcbiAga2V5OiBzdHJpbmc7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIG1vZGVsOiBzdHJpbmcgfCBudWxsO1xuICBoYW5kbGVyOiBzdHJpbmcgfCBudWxsO1xuICBjb2x1bW5zOiBudW1iZXI7XG4gIHJlbGF0aW9uc2hpcHM6IG51bWJlcjtcbiAgZW51bXM6IFNlbWFudGljQnVpbGRFbnVtW107XG4gIGNvbXB1dGVkRmllbGRzOiBzdHJpbmdbXTtcbiAgZnVuY3Rpb25Db3VudDogbnVtYmVyO1xuICBtb2RlbEZ1bmN0aW9uQ291bnQ6IG51bWJlcjtcbiAgaGFuZGxlckZ1bmN0aW9uQ291bnQ6IG51bWJlcjtcbiAgc3RhZ2VzOiBSZWNvcmQ8c3RyaW5nLCBTZW1hbnRpY0J1aWxkU3RhZ2U+O1xufVxuXG4vLyBPbmUgc3RhbmRhbG9uZSBjb2RlIGNsYXNzIHRoZSBidWlsZCByZWFkOiBkb21haW4gbG9naWMgd2l0aCBubyB0YWJsZSBvZiBpdHNcbi8vIG93biAoYSBzdW1tYXJ5IG1vZGVsLCBhIGNhbGN1bGF0aW9uIHNlcnZpY2UpLiBUaGUgcmVwb3J0IEFJIHJlYWRzIGl0cyBjb2RlXG4vLyBleGFjdGx5IGxpa2UgYW4gZW50aXR5J3MsIGJ1dCBpdCBjYW4gbmV2ZXIgYmUgcXVlcmllZCDigJQgdGhlcmUgaXMgbm90aGluZyB0b1xuLy8gc2VsZWN0IGZyb20g4oCUIHNvIGl0IGNhcnJpZXMgbm8gdGFibGUsIGNvbHVtbnMgb3IgcmVsYXRpb25zaGlwcy5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZENsYXNzIHtcbiAga2V5OiBzdHJpbmc7XG4gIG1vZGVsOiBzdHJpbmcgfCBudWxsO1xuICBmdW5jdGlvbkNvdW50OiBudW1iZXI7XG59XG5cbi8vIFdoYXQgdGhlIGJ1aWxkIGRlY2lkZWQgYSBwaHlzaWNhbCB0YWJsZSBpcy4gRW50aXR5IGFuZCBqdW5jdGlvbiBhcmUgYm90aFxuLy8gcmVhY2hhYmxlIGJ5IHRoZSByZXBvcnQgQUkg4oCUIGFuIGVudGl0eSBkaXJlY3RseSwgYSBqdW5jdGlvbiB0aHJvdWdoIHRoZVxuLy8gbWFueS10by1tYW55IGl0IGJyaWRnZXMuIEV4Y2x1ZGVkIGlzIG5vdCByZWFjaGFibGUgYXQgYWxsLlxuZXhwb3J0IHR5cGUgU2VtYW50aWNUYWJsZUNsYXNzaWZpY2F0aW9uID0gJ2VudGl0eScgfCAnanVuY3Rpb24nIHwgJ2V4Y2x1ZGVkJztcblxuLy8gT25lIHBoeXNpY2FsIHRhYmxlIGFzIHRoZSBidWlsZCBjbGFzc2lmaWVkIGl0LiBgcmVhc29uYCBhbnN3ZXJzIGEgc2luZ2xlXG4vLyBxdWVzdGlvbiDigJQgd2h5IGNhbid0IHRoZSByZXBvcnQgQUkgc2VlIHRoaXMgdGFibGU/IOKAlCBhbmQgaXMgbnVsbCB3aGVuIGl0IGNhbi5cbi8vIEEganVuY3Rpb24gd2l0aCBhIHJlYXNvbiBicmlkZ2VkIG5vdGhpbmcsIHNvIGl0IGlzIGp1c3QgYXMgaW52aXNpYmxlIGFzIGFuXG4vLyBleGNsdWRlZCB0YWJsZS5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZFRhYmxlIHtcbiAgdGFibGU6IHN0cmluZztcbiAgY2xhc3NpZmljYXRpb246IFNlbWFudGljVGFibGVDbGFzc2lmaWNhdGlvbjtcbiAgbW9kZWw6IHN0cmluZyB8IG51bGw7XG4gIHJlYXNvbjogc3RyaW5nIHwgbnVsbDtcbn1cblxuLy8gVGhlIGJ1aWxkIHNjb3JlYm9hcmQgc2hpcHBlZCBhbG9uZ3NpZGUgdGhlIGJ1aWxkIHN0YXR1czogdGhlIHN1bW1hcnkgY291bnRzLFxuLy8gdGhlIGZ1bGwgYnJlYWtkb3duIHRoZSBzZXR0aW5ncyBkaWFsb2cgZHJpbGxzIGludG8g4oCUIEJPVEgga2luZHMgb2YgdW5pdCB0aGVcbi8vIGJ1aWxkIGNhY2hlcywgdGFibGUtYmFja2VkIGVudGl0aWVzIGFuZCBzdGFuZGFsb25lIGNvZGUgY2xhc3NlcyDigJQgYW5kIHRoZVxuLy8gY2F0YWxvZyBvZiBldmVyeSB0YWJsZSB0aGUgYnVpbGQgc2F3LCBzbyB0aGUgdGFiIGNhbiBzaG93IHdoYXQgdGhlIHJlcG9ydCBBSVxuLy8gY2FuJ3Qgc2VlLCBub3QganVzdCB3aGF0IGl0IGNhbi5cbi8vXG4vLyBgZnVuY3Rpb25Db3VudGAgc3BhbnMgZW50aXRpZXMgYW5kIGNsYXNzZXMgYWxpa2U6IGl0IGlzIHRoZSBzYW1lIHRvdGFsIHRoZVxuLy8gYnVpbGQgaXRzZWxmIHJlcG9ydHMgd2hlbiBpdCBmaW5pc2hlcy5cbi8vXG4vLyBgdGFibGVzYCBpcyBlbXB0eSBmb3IgYW4gYXJ0aWZhY3QgYnVpbHQgYmVmb3JlIHRoZSBjYXRhbG9nIGV4aXN0ZWQuIFJlYWQgdGhhdFxuLy8gYXMgXCJubyBjYXRhbG9nXCIsIG5ldmVyIGFzIFwibm90aGluZyB3YXMgZXhjbHVkZWRcIi5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZERldGFpbCB7XG4gIC8vIFdoZXRoZXIgdGhlIGFydGlmYWN0IHdhcyBwcm9kdWNlZCBieSBhIGJ1aWxkIHRoYXQgcmFuIHRvIHRoZSBlbmQuIFJlYWQgaXRcbiAgLy8gYmVzaWRlIGBnZW5lcmF0ZWRBdGAsIG5ldmVyIGluc3RlYWQgb2YgaXQ6IHRoZSBzdHJ1Y3R1cmFsIGFydGlmYWN0IGlzXG4gIC8vIHB1Ymxpc2hlZCBCRUZPUkUgdGhlIEFJIGZ1bmN0aW9uIHBhc3MsIHNvIGEgYnVpbGQgd2hvc2UgQUkgcGFzcyBmYWlsZWQgc3RpbGxcbiAgLy8gY2FycmllcyBhIGRhdGUgYW5kIGEgZnVsbCBzZXQgb2YgY291bnRzLiBUaGUgZGF0ZSBzYXlzIHNvbWV0aGluZyB3YXNcbiAgLy8gd3JpdHRlbjsgb25seSB0aGlzIHNheXMgdGhlIGJ1aWxkIGZpbmlzaGVkIHdyaXRpbmcgaXQuXG4gIGNvbXBsZXRlOiBib29sZWFuO1xuICBnZW5lcmF0ZWRBdDogRGF0ZSB8IG51bGw7XG4gIGVudGl0eUNvdW50OiBudW1iZXI7XG4gIGNsYXNzQ291bnQ6IG51bWJlcjtcbiAgZnVuY3Rpb25Db3VudDogbnVtYmVyO1xuICBlbnRpdGllczogU2VtYW50aWNCdWlsZEVudGl0eVtdO1xuICBjbGFzc2VzOiBTZW1hbnRpY0J1aWxkQ2xhc3NbXTtcbiAgdGFibGVDb3VudDogbnVtYmVyO1xuICBqdW5jdGlvbkNvdW50OiBudW1iZXI7XG4gIHVubGlua2VkSnVuY3Rpb25Db3VudDogbnVtYmVyO1xuICBleGNsdWRlZENvdW50OiBudW1iZXI7XG4gIHRhYmxlczogU2VtYW50aWNCdWlsZFRhYmxlW107XG59XG5cbi8vIFdoaWNoIGNsYXNzIGEgY2FjaGVkIGZ1bmN0aW9uIHdhcyByZWFkIGZyb20uIEFuIGVudGl0eSdzIGNhY2hlIHNwbGl0cyBpbnRvXG4vLyAnbW9kZWwnIGFuZCAnaGFuZGxlcic7IGEgc3RhbmRhbG9uZSBjb2RlIGNsYXNzIGhhcyBvbmUgZ3JvdXAsICdjbGFzcycuXG5leHBvcnQgdHlwZSBTZW1hbnRpY0Z1bmN0aW9uU291cmNlID0gJ21vZGVsJyB8ICdoYW5kbGVyJyB8ICdjbGFzcyc7XG5cbi8vIE9uZSBBSS1jbGFzc2lmaWVkIGNvZGUgZnVuY3Rpb24gZnJvbSBhIG1vZGVsLCBoYW5kbGVyIG9yIHN0YW5kYWxvbmUgY2xhc3M6XG4vLyB3aGF0IGtpbmQgb2YgbG9naWMgaXQgaXMsIHdoYXQgaXQgZG9lcywgYW5kIHdoYXQgaXQgcHJvZHVjZXMg4oCUIHRoZSBidWlsZCdzXG4vLyBjYWNoZWQgXCJ3aGF0IHRoZSBjb2RlIGRvZXNcIiBrbm93bGVkZ2Ugc2hvd24gaW4gdGhlIGZ1bmN0aW9ucyBkaWFsb2cuXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljRW50aXR5RnVuY3Rpb24ge1xuICBjbGFzczogc3RyaW5nO1xuICBtZXRob2Q6IHN0cmluZztcbiAgc2lnbmF0dXJlOiBzdHJpbmc7XG4gIGtpbmQ6IHN0cmluZztcbiAgc3VtbWFyeTogc3RyaW5nO1xuICBwcm9kdWNlczogc3RyaW5nO1xuICBzb3VyY2U6IFNlbWFudGljRnVuY3Rpb25Tb3VyY2U7XG59XG5cbi8vIE9uZSBlbnRpdHkncyBjYWNoZWQgY29kZS1mdW5jdGlvbiBrbm93bGVkZ2UsIGZldGNoZWQgd2hlbiBhIGZ1bmN0aW9ucyBkaWFsb2dcbi8vIG9wZW5zICh0aGUgZnVsbCBzZXQgYWNyb3NzIGFsbCBlbnRpdGllcyBpcyB0b28gYmlnIHRvIHNoaXAgd2l0aCB0aGVcbi8vIHNjb3JlYm9hcmQpLiBPbmUgcGF5bG9hZCBzZXJ2ZXMgYm90aCBkaWFsb2dzIOKAlCBjb25zdW1lcnMgZmlsdGVyIGJ5IHNvdXJjZS5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNFbnRpdHlGdW5jdGlvbnMge1xuICBlbnRpdHk6IHN0cmluZztcbiAgZ2VuZXJhdGVkQXQ6IERhdGUgfCBudWxsO1xuICBtb2RlbENsYXNzOiBzdHJpbmcgfCBudWxsO1xuICBoYW5kbGVyQ2xhc3M6IHN0cmluZyB8IG51bGw7XG4gIGZ1bmN0aW9uczogU2VtYW50aWNFbnRpdHlGdW5jdGlvbltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGRTdGF0dXMge1xuICBidWlsZDogU2VtYW50aWNCdWlsZCB8IG51bGw7XG4gIGRldGFpbDogU2VtYW50aWNCdWlsZERldGFpbDtcbn1cblxuLy8gVGhlIHJlcG9ydCBtb2R1bGUncyBHZW5lcmFsIHNldHRpbmdzIChhIHNtYWxsIGdsb2JhbCBrZXkvdmFsdWUgc3RvcmUsIHRoZVxuLy8gcmVwb3J0aW5nIGNvdW50ZXJwYXJ0IG9mIHRoZSBhcHAtd2lkZSBzZXR0aW5ncykuIEVhY2ggdmFsdWUgc2hpcHMgd2l0aCB0aGVcbi8vIHNhZmUgYmFuZCBpdHMgZWRpdG9yIGZpZWxkIGlzIGJvdW5kZWQgdG8uXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFNldHRpbmdzIHtcbiAgLy8gSG93IG1hbnkgc3VtbWFyeSBjYWxscyB0aGUgc2VtYW50aWMgYnVpbGQgcnVucyBhdCBvbmNlLlxuICBzZW1hbnRpY0J1aWxkQ29uY3VycmVuY3k6IG51bWJlcjtcbiAgc2VtYW50aWNCdWlsZENvbmN1cnJlbmN5TWluOiBudW1iZXI7XG4gIHNlbWFudGljQnVpbGRDb25jdXJyZW5jeU1heDogbnVtYmVyO1xufVxuIl19