@worktile/planet 17.0.0-next.0 → 17.0.0-next.2
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.
- package/CHANGELOG.md +24 -0
- package/README.md +62 -37
- package/application/ng-planet-application-ref.d.ts.map +1 -1
- package/assets-loader.d.ts +2 -3
- package/assets-loader.d.ts.map +1 -1
- package/esm2022/application/ng-planet-application-ref.mjs +4 -2
- package/esm2022/assets-loader.mjs +42 -8
- package/esm2022/helpers.mjs +83 -17
- package/esm2022/planet.class.mjs +1 -1
- package/fesm2022/worktile-planet.mjs +125 -23
- package/fesm2022/worktile-planet.mjs.map +1 -1
- package/helpers.d.ts +5 -2
- package/helpers.d.ts.map +1 -1
- package/package.json +1 -1
- package/planet.class.d.ts +84 -4
- package/planet.class.d.ts.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,30 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
# [17.0.0-next.2](https://github.com/worktile/ngx-planet/compare/17.0.0-next.1...17.0.0-next.2) (2024-03-14)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* should parse script without "> end ([#312](https://github.com/worktile/ngx-planet/issues/312)) ([634d08b](https://github.com/worktile/ngx-planet/commit/634d08ba7f763beb368916b0c7846d091461dc16))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# [17.0.0-next.1](https://github.com/worktile/ngx-planet/compare/17.0.0-next.0...17.0.0-next.1) (2024-03-13)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Bug Fixes
|
|
18
|
+
|
|
19
|
+
* can't build basePath for manifest ([ca6acf4](https://github.com/worktile/ngx-planet/commit/ca6acf406f0eb5b6300a37fe0162ef89717b3148))
|
|
20
|
+
* sync portal router navigate in ngZone ([20259f9](https://github.com/worktile/ngx-planet/commit/20259f9945313aee7904d42274d7dd94a5a2afa0))
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Features
|
|
24
|
+
|
|
25
|
+
* support index.html as assets manifest and add entry instead of manifest, scripts, styles and resourcePathPrefix ([#308](https://github.com/worktile/ngx-planet/issues/308)) ([0670411](https://github.com/worktile/ngx-planet/commit/067041162ff7908f6cd950338e197847fa562308))
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
5
29
|
# [17.0.0-next.0](https://github.com/worktile/ngx-planet/compare/16.0.0...17.0.0-next.0) (2024-03-08)
|
|
6
30
|
|
|
7
31
|
|
package/README.md
CHANGED
|
@@ -66,17 +66,17 @@ class AppModule {}
|
|
|
66
66
|
|
|
67
67
|
### 2. Register applications to planet use PlanetService in portal app
|
|
68
68
|
|
|
69
|
-
```
|
|
69
|
+
```ts
|
|
70
70
|
@Component({
|
|
71
71
|
selector: 'app-portal-root',
|
|
72
72
|
template: `
|
|
73
|
-
<nav>
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
</nav>
|
|
77
|
-
<router-outlet></router-outlet>
|
|
78
|
-
<div id="app-host-container"></div>
|
|
79
|
-
<div *ngIf="!loadingDone">加载中...</div>
|
|
73
|
+
<nav>
|
|
74
|
+
<a [routerLink]="['/app1']" routerLinkActive="active">应用1</a>
|
|
75
|
+
<a [routerLink]="['/app2']" routerLinkActive="active">应用2</a>
|
|
76
|
+
</nav>
|
|
77
|
+
<router-outlet></router-outlet>
|
|
78
|
+
<div id="app-host-container"></div>
|
|
79
|
+
<div *ngIf="!loadingDone">加载中...</div>
|
|
80
80
|
`
|
|
81
81
|
})
|
|
82
82
|
export class AppComponent implements OnInit {
|
|
@@ -104,14 +104,8 @@ export class AppComponent implements OnInit {
|
|
|
104
104
|
hostParent: '#app-host-container',
|
|
105
105
|
hostClass: 'thy-layout',
|
|
106
106
|
routerPathPrefix: '/app1',
|
|
107
|
-
resourcePathPrefix: '/static/app1',
|
|
108
107
|
preload: true,
|
|
109
|
-
|
|
110
|
-
'main.js'
|
|
111
|
-
],
|
|
112
|
-
styles: [
|
|
113
|
-
'styles.css'
|
|
114
|
-
]
|
|
108
|
+
entry: "/static/app2/index.html"
|
|
115
109
|
},
|
|
116
110
|
{
|
|
117
111
|
name: 'app2',
|
|
@@ -119,12 +113,16 @@ export class AppComponent implements OnInit {
|
|
|
119
113
|
hostClass: 'thy-layout',
|
|
120
114
|
routerPathPrefix: '/app2',
|
|
121
115
|
preload: true,
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
'
|
|
127
|
-
|
|
116
|
+
entry: {
|
|
117
|
+
basePath: "/static/app1/"
|
|
118
|
+
manifest: "index.html"
|
|
119
|
+
scripts: [
|
|
120
|
+
'main.js'
|
|
121
|
+
],
|
|
122
|
+
styles: [
|
|
123
|
+
'styles.css'
|
|
124
|
+
]
|
|
125
|
+
}
|
|
128
126
|
}
|
|
129
127
|
]);
|
|
130
128
|
|
|
@@ -137,9 +135,10 @@ export class AppComponent implements OnInit {
|
|
|
137
135
|
}
|
|
138
136
|
```
|
|
139
137
|
|
|
140
|
-
### 3. Sub App define how to bootstrap
|
|
138
|
+
### 3. Sub App define how to bootstrap
|
|
141
139
|
|
|
142
|
-
|
|
140
|
+
for NgModule application:
|
|
141
|
+
```ts
|
|
143
142
|
defineApplication('app1', {
|
|
144
143
|
template: `<app1-root class="app1-root"></app1-root>`,
|
|
145
144
|
bootstrap: (portalApp: PlanetPortalApplication) => {
|
|
@@ -165,24 +164,50 @@ defineApplication('app1', {
|
|
|
165
164
|
});
|
|
166
165
|
```
|
|
167
166
|
|
|
167
|
+
for Standalone application: (>= 17.0.0)
|
|
168
|
+
|
|
169
|
+
```ts
|
|
170
|
+
defineApplication('standalone-app', {
|
|
171
|
+
template: `<standalone-app-root></standalone-app-root>`,
|
|
172
|
+
bootstrap: (portalApp: PlanetPortalApplication) => {
|
|
173
|
+
return bootstrapApplication(AppRootComponent, {
|
|
174
|
+
providers: [
|
|
175
|
+
{
|
|
176
|
+
provide: PlanetPortalApplication,
|
|
177
|
+
useValue: portalApp
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
provide: AppRootContext,
|
|
181
|
+
useValue: portalApp.data.appRootContext
|
|
182
|
+
}
|
|
183
|
+
]
|
|
184
|
+
}).catch(error => {
|
|
185
|
+
console.error(error);
|
|
186
|
+
return null;
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
```
|
|
191
|
+
|
|
168
192
|
## Documents
|
|
169
193
|
|
|
170
194
|
### Sub app configurations
|
|
171
195
|
|
|
172
|
-
| Name
|
|
173
|
-
|
|
|
174
|
-
| name
|
|
175
|
-
| routerPathPrefix | string
|
|
176
|
-
| selector | string | selector of app root component
|
|
177
|
-
|
|
|
178
|
-
|
|
|
179
|
-
|
|
|
180
|
-
|
|
|
181
|
-
|
|
|
182
|
-
|
|
|
183
|
-
|
|
|
184
|
-
|
|
|
185
|
-
|
|
|
196
|
+
| Name | Type | Description | 中文描述 |
|
|
197
|
+
| ------- | -------- | ----------| -------------- |
|
|
198
|
+
| name | string | Application's name | 子应用的名字 |
|
|
199
|
+
| routerPathPrefix | string | Application route path prefix | 子应用路由路径前缀,根据这个匹配应用 |
|
|
200
|
+
| selector | string | selector of app root component | 子应用的启动组件选择器,因为子应用是主应用动态加载的,所以主应用需要先创建这个选择器节点,再启动 AppModule |
|
|
201
|
+
| entry | string \| PlanetApplicationEntry | entry for micro app, contains manifest, scripts, styles | 入口配置,如果是字符串表示应用入口 index.html,如果是对象, manifest 为入口 html 或者 json 文件地址,scripts 和 styles 为指定的资源列表,未指定使用 manifest 接口中返回的所有资源,basePath 为基本路由,所有的资源请求地址前会带上 basePath |
|
|
202
|
+
| manifest | string | manifest json file path `deprecated` please use entry | manifest.json 文件路径地址,当设置了路径后会先加载这个文件,然后根据 scripts 和 styles 文件名去找到匹配的文件,因为生产环境的静态资文件是 hash 之后的命名,需要动态获取 |
|
|
203
|
+
| scripts | string[] | javascript static resource paths `deprecated` please use entry.scripts | JS 静态资源文件访问地址 |
|
|
204
|
+
| styles | string[] | style static resource paths `deprecated` please use entry.styles | 样式静态资源文件访问地址 |
|
|
205
|
+
| resourcePathPrefix | string | path prefix of scripts and styles `deprecated` please use entry.basePath | 脚本和样式文件路径前缀,多个脚本可以避免重复写同样的前缀 |
|
|
206
|
+
| hostParent | string or HTMLElement | parent element for render | 应用渲染的容器元素, 指定子应用显示在哪个元素内部 |
|
|
207
|
+
| hostClass | string | added class for host which is selector | 宿主元素的 Class,也就是在子应用启动组件上追加的样式 |
|
|
208
|
+
| switchMode | default or coexist | it will be destroyed when set to default, it only hide app when set to coexist | 切换子应用的模式,默认切换会销毁,设置 coexist 后只会隐藏 |
|
|
209
|
+
| preload | boolean | start preload or not | 是否启用预加载,启动后刷新页面等当前页面的应用渲染完毕后预加载子应用 |
|
|
210
|
+
| loadSerial | boolean | serial load scripts | 是否串行加载脚本静态资源 |
|
|
186
211
|
|
|
187
212
|
### Communication between applications use GlobalEventDispatcher
|
|
188
213
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-planet-application-ref.d.ts","sourceRoot":"","sources":["../../../packages/planet/src/application/ng-planet-application-ref.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAuB,MAAM,eAAe,CAAC;AACzF,OAAO,EAAE,MAAM,EAAiB,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,UAAU,EAAQ,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,EAAsB,OAAO,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,MAAM,MAAM,oBAAoB,GAAG,CAC/B,SAAS,EAAE,uBAAuB,KACjC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,cAAc,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;AAE1E,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,oBAAoB,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AACtD;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;CAAG;AAE/D,MAAM,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,CAAC,KAAK,CAAC,KAAK,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAE5I,qBAAa,sBAAuB,YAAW,oBAAoB;IAC/D,OAAO,CAAC,QAAQ,CAAC,CAAsB;IACvC,OAAO,CAAC,MAAM,CAAC,CAAiB;IACzB,YAAY,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,kBAAkB,CAAC,CAAuB;IAClD,OAAO,CAAC,gBAAgB,CAAC,CAAwB;IAEjD,IAAW,QAAQ,WAElB;IAED,IAAW,MAAM,IAAI,MAAM,GAAG,SAAS,CAEtC;IAED,IAAW,OAAO,IAAI,OAAO,CAE5B;IAED,IAAW,YAAY,IAAI,OAAO,CAEjC;gBAEW,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB;IAgBpD,OAAO,CAAC,gCAAgC;
|
|
1
|
+
{"version":3,"file":"ng-planet-application-ref.d.ts","sourceRoot":"","sources":["../../../packages/planet/src/application/ng-planet-application-ref.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAuB,MAAM,eAAe,CAAC;AACzF,OAAO,EAAE,MAAM,EAAiB,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,UAAU,EAAQ,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,EAAsB,OAAO,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,MAAM,MAAM,oBAAoB,GAAG,CAC/B,SAAS,EAAE,uBAAuB,KACjC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,cAAc,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;AAE1E,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,oBAAoB,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AACtD;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;CAAG;AAE/D,MAAM,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,CAAC,KAAK,CAAC,KAAK,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAE5I,qBAAa,sBAAuB,YAAW,oBAAoB;IAC/D,OAAO,CAAC,QAAQ,CAAC,CAAsB;IACvC,OAAO,CAAC,MAAM,CAAC,CAAiB;IACzB,YAAY,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,kBAAkB,CAAC,CAAuB;IAClD,OAAO,CAAC,gBAAgB,CAAC,CAAwB;IAEjD,IAAW,QAAQ,WAElB;IAED,IAAW,MAAM,IAAI,MAAM,GAAG,SAAS,CAEtC;IAED,IAAW,OAAO,IAAI,OAAO,CAE5B;IAED,IAAW,YAAY,IAAI,OAAO,CAEjC;gBAEW,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB;IAgBpD,OAAO,CAAC,gCAAgC;IAkBxC,SAAS,CAAC,GAAG,EAAE,uBAAuB,GAAG,UAAU,CAAC,IAAI,CAAC;IAuBzD,SAAS;IAIT,wBAAwB;IAIxB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAOhC,mBAAmB;IAInB,wBAAwB,CAAC,gBAAgB,EAAE,qBAAqB;IAIhE,OAAO,IAAI,IAAI;CAgBlB"}
|
package/assets-loader.d.ts
CHANGED
|
@@ -26,10 +26,9 @@ export declare class AssetsLoader {
|
|
|
26
26
|
sandbox?: boolean;
|
|
27
27
|
serial?: boolean;
|
|
28
28
|
}): Observable<[AssetsLoadResult[], AssetsLoadResult[]]>;
|
|
29
|
+
parseManifestFromHTML(html: string): Record<string, string>;
|
|
29
30
|
loadAppAssets(app: PlanetApplication): Observable<[AssetsLoadResult[], AssetsLoadResult[]]>;
|
|
30
|
-
loadManifest(url: string): Observable<
|
|
31
|
-
[key: string]: string;
|
|
32
|
-
}>;
|
|
31
|
+
loadManifest(url: string, responseType?: 'text' | 'json'): Observable<Record<string, string> | string>;
|
|
33
32
|
static ɵfac: i0.ɵɵFactoryDeclaration<AssetsLoader, never>;
|
|
34
33
|
static ɵprov: i0.ɵɵInjectableDeclaration<AssetsLoader>;
|
|
35
34
|
}
|
package/assets-loader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets-loader.d.ts","sourceRoot":"","sources":["../../packages/planet/src/assets-loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAM,UAAU,EAA8B,MAAM,MAAM,CAAC;AAElE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"assets-loader.d.ts","sourceRoot":"","sources":["../../packages/planet/src/assets-loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAM,UAAU,EAA8B,MAAM,MAAM,CAAC;AAElE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAA0B,MAAM,gBAAgB,CAAC;;AAM3E,MAAM,WAAW,gBAAgB;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,qBAGa,YAAY;IAGT,OAAO,CAAC,IAAI;IAFxB,OAAO,CAAC,aAAa,CAAgB;gBAEjB,IAAI,EAAE,UAAU;IAEpC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,gBAAgB,CAAC;IAyDrD,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,gBAAgB,CAAC;IAsC7E,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,gBAAgB,CAAC;IAyCpD,WAAW,CACP,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,GAAE;QACL,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,OAAO,CAAC;KAIpB,GACF,UAAU,CAAC,gBAAgB,EAAE,CAAC;IAyBjC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,gBAAgB,EAAE,CAAC;IAW7D,oBAAoB,CAChB,OAAO,GAAE,MAAM,EAAO,EACtB,MAAM,GAAE,MAAM,EAAO,EACrB,OAAO,CAAC,EAAE;QACN,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,OAAO,CAAC;KACpB;IAKL,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAqB3D,aAAa,CAAC,GAAG,EAAE,iBAAiB;IA8BpC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,GAAE,MAAM,GAAG,MAAe,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC;yCA1PrG,YAAY;6CAAZ,YAAY;CAqQxB"}
|
|
@@ -41,7 +41,9 @@ export class NgPlanetApplicationRef {
|
|
|
41
41
|
.asObservable()
|
|
42
42
|
.pipe(take(1))
|
|
43
43
|
.subscribe(() => {
|
|
44
|
-
this.portalApp.
|
|
44
|
+
this.portalApp.ngZone.run(() => {
|
|
45
|
+
this.portalApp.router.navigateByUrl(event.url);
|
|
46
|
+
});
|
|
45
47
|
});
|
|
46
48
|
}
|
|
47
49
|
});
|
|
@@ -103,4 +105,4 @@ export class NgPlanetApplicationRef {
|
|
|
103
105
|
}
|
|
104
106
|
}
|
|
105
107
|
}
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctcGxhbmV0LWFwcGxpY2F0aW9uLXJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYW5ldC9zcmMvYXBwbGljYXRpb24vbmctcGxhbmV0LWFwcGxpY2F0aW9uLXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtCLFdBQVcsRUFBRSxNQUFNLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBYyxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJeEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxrQkFBa0IsRUFBVyxNQUFNLGFBQWEsQ0FBQztBQXVCMUQsTUFBTSxPQUFPLHNCQUFzQjtJQVcvQixJQUFXLFFBQVE7UUFDZixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDZCxPQUFPLGtCQUFrQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQVcsWUFBWTtRQUNuQixPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxZQUFZLElBQVksRUFBRSxPQUEwQjtRQUNoRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1YsSUFB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cG9ydCB7IEFwcGxpY2F0aW9uUmVmLCBOZ01vZHVsZVJlZiwgTmdab25lLCBFbnZpcm9ubWVudEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIsIE5hdmlnYXRpb25FbmQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFBsYW5ldFBvcnRhbEFwcGxpY2F0aW9uIH0gZnJvbSAnLi9wb3J0YWwtYXBwbGljYXRpb24nO1xuaW1wb3J0IHsgUGxhbnRDb21wb25lbnRDb25maWcgfSBmcm9tICcuLi9jb21wb25lbnQvcGxhbnQtY29tcG9uZW50LmNvbmZpZyc7XG5pbXBvcnQgeyBQbGFuZXRDb21wb25lbnRSZWYgfSBmcm9tICcuLi9jb21wb25lbnQvcGxhbmV0LWNvbXBvbmVudC1yZWYnO1xuaW1wb3J0IHsgZ2V0VGFnTmFtZUJ5VGVtcGxhdGUgfSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCB7IGdldFNhbmRib3hJbnN0YW5jZSwgU2FuZGJveCB9IGZyb20gJy4uL3NhbmRib3gvJztcbmltcG9ydCB7IFBsYW5ldEFwcGxpY2F0aW9uUmVmIH0gZnJvbSAnLi9wbGFuZXQtYXBwbGljYXRpb24tcmVmJztcblxuZXhwb3J0IHR5cGUgTmdCb290c3RyYXBBcHBNb2R1bGUgPSAoXG4gICAgcG9ydGFsQXBwOiBQbGFuZXRQb3J0YWxBcHBsaWNhdGlvblxuKSA9PiBQcm9taXNlPE5nTW9kdWxlUmVmPGFueT4gfCB2b2lkIHwgQXBwbGljYXRpb25SZWYgfCB1bmRlZmluZWQgfCBudWxsPjtcblxuZXhwb3J0IGludGVyZmFjZSBOZ0Jvb3RzdHJhcE9wdGlvbnMge1xuICAgIHRlbXBsYXRlOiBzdHJpbmc7XG4gICAgYm9vdHN0cmFwOiBOZ0Jvb3RzdHJhcEFwcE1vZHVsZTtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBwbGVhc2UgdXNlIE5nQm9vdHN0cmFwQXBwTW9kdWxlXG4gKi9cbmV4cG9ydCB0eXBlIEJvb3RzdHJhcEFwcE1vZHVsZSA9IE5nQm9vdHN0cmFwQXBwTW9kdWxlO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBwbGVhc2UgdXNlIE5nQm9vdHN0cmFwT3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJvb3RzdHJhcE9wdGlvbnMgZXh0ZW5kcyBOZ0Jvb3RzdHJhcE9wdGlvbnMge31cblxuZXhwb3J0IHR5cGUgUGxhbnRDb21wb25lbnRGYWN0b3J5ID0gPFREYXRhLCBUQ29tcD4oY29tcG9uZW50TmFtZTogc3RyaW5nLCBjb25maWc6IFBsYW50Q29tcG9uZW50Q29uZmlnPFREYXRhPikgPT4gUGxhbmV0Q29tcG9uZW50UmVmPFRDb21wPjtcblxuZXhwb3J0IGNsYXNzIE5nUGxhbmV0QXBwbGljYXRpb25SZWYgaW1wbGVtZW50cyBQbGFuZXRBcHBsaWNhdGlvblJlZiB7XG4gICAgcHJpdmF0ZSBpbmplY3Rvcj86IEVudmlyb25tZW50SW5qZWN0b3I7XG4gICAgcHJpdmF0ZSBhcHBSZWY/OiBBcHBsaWNhdGlvblJlZjtcbiAgICBwdWJsaWMgYXBwTW9kdWxlUmVmPzogTmdNb2R1bGVSZWY8YW55PjtcbiAgICBwdWJsaWMgdGVtcGxhdGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBpbm5lclNlbGVjdG9yPzogc3RyaW5nO1xuICAgIHByaXZhdGUgbmFtZTogc3RyaW5nO1xuICAgIHByaXZhdGUgcG9ydGFsQXBwITogUGxhbmV0UG9ydGFsQXBwbGljYXRpb247XG4gICAgcHJpdmF0ZSBhcHBNb2R1bGVCb290c3RyYXA/OiBOZ0Jvb3RzdHJhcEFwcE1vZHVsZTtcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3Rvcnk/OiBQbGFudENvbXBvbmVudEZhY3Rvcnk7XG5cbiAgICBwdWJsaWMgZ2V0IHNlbGVjdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbm5lclNlbGVjdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbmdab25lKCk6IE5nWm9uZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiAodGhpcy5pbmplY3RvciB8fCB0aGlzLmFwcE1vZHVsZVJlZj8uaW5qZWN0b3IpPy5nZXQoTmdab25lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNhbmRib3goKTogU2FuZGJveCB7XG4gICAgICAgIHJldHVybiBnZXRTYW5kYm94SW5zdGFuY2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGJvb3RzdHJhcHBlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuYXBwTW9kdWxlUmVmIHx8IHRoaXMuYXBwUmVmKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBCb290c3RyYXBPcHRpb25zKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlID0gb3B0aW9ucy50ZW1wbGF0ZTtcbiAgICAgICAgICAgIHRoaXMuaW5uZXJTZWxlY3RvciA9IHRoaXMudGVtcGxhdGUgPyBnZXRUYWdOYW1lQnlUZW1wbGF0ZSh0aGlzLnRlbXBsYXRlKSA6ICcnO1xuICAgICAgICAgICAgdGhpcy5hcHBNb2R1bGVCb290c3RyYXAgPSBvcHRpb25zLmJvb3RzdHJhcDtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGlzIGlzIGEgaGFjaywgc2luY2UgTmdab25lIGRvZXNuJ3QgYWxsb3cgeW91IHRvIGNvbmZpZ3VyZSB0aGUgcHJvcGVydHkgdGhhdCBpZGVudGlmaWVzIHlvdXIgem9uZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9QbGFjZU1lLVNBUy9zaW5nbGUtc3BhLWFuZ3VsYXItY2xpL2lzc3Vlcy8zMyxcbiAgICAgICAgLy8gTmdab25lLmlzSW5Bbmd1bGFyWm9uZSA9ICgpID0+IHtcbiAgICAgICAgLy8gICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgLy8gICAgIHJldHVybiB3aW5kb3cuWm9uZS5jdXJyZW50Ll9wcm9wZXJ0aWVzW2BuZ3gtcGxhbmV0LSR7bmFtZX1gXSA9PT0gdHJ1ZTtcbiAgICAgICAgLy8gfTtcbiAgICB9XG5cbiAgICAvLyDlrZDlupTnlKjot6/nlLHlj5jljJblkI7lkIzmraXkv67mlLkgcG9ydGFsIOeahCBSb3V0ZVxuICAgIHByaXZhdGUgc3luY1BvcnRhbFJvdXRlV2hlbk5hdmlnYXRpb25FbmQoKSB7XG4gICAgICAgIGNvbnN0IHJvdXRlciA9ICh0aGlzLmluamVjdG9yIHx8IHRoaXMuYXBwTW9kdWxlUmVmPy5pbmplY3Rvcik/LmdldChSb3V0ZXIpO1xuICAgICAgICBpZiAocm91dGVyKSB7XG4gICAgICAgICAgICByb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZT8ub25TdGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9ydGFsQXBwLnJvdXRlciEubmF2aWdhdGVCeVVybChldmVudC51cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBib290c3RyYXAoYXBwOiBQbGFuZXRQb3J0YWxBcHBsaWNhdGlvbik6IE9ic2VydmFibGU8dGhpcz4ge1xuICAgICAgICBpZiAoIXRoaXMuYXBwTW9kdWxlQm9vdHN0cmFwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGFwcCgke3RoaXMubmFtZX0pIGlzIG5vdCBkZWZpbmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb3J0YWxBcHAgPSBhcHA7XG4gICAgICAgIHJldHVybiBmcm9tKFxuICAgICAgICAgICAgdGhpcy5hcHBNb2R1bGVCb290c3RyYXAoYXBwKS50aGVuKGFwcE1vZHVsZVJlZiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGFwcE1vZHVsZVJlZlsnaW5zdGFuY2UnXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcE1vZHVsZVJlZiA9IGFwcE1vZHVsZVJlZiBhcyBOZ01vZHVsZVJlZjxhbnk+O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcE1vZHVsZVJlZi5pbnN0YW5jZS5hcHBOYW1lID0gdGhpcy5uYW1lO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluamVjdG9yID0gdGhpcy5hcHBNb2R1bGVSZWYuaW5qZWN0b3I7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBSZWYgPSBhcHBNb2R1bGVSZWYgYXMgdW5rbm93biBhcyBBcHBsaWNhdGlvblJlZjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmplY3RvciA9IHRoaXMuYXBwUmVmLmluamVjdG9yO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb2R1bGVSZWYgPSB0aGlzLmFwcFJlZi5pbmplY3Rvci5nZXQoTmdNb2R1bGVSZWYpO1xuICAgICAgICAgICAgICAgICAgICAobW9kdWxlUmVmIGFzIGFueSkuaW5zdGFuY2UgPSB7IGFwcE5hbWU6IHRoaXMubmFtZSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNQb3J0YWxSb3V0ZVdoZW5OYXZpZ2F0aW9uRW5kKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldFJvdXRlcigpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmluamVjdG9yIHx8IHRoaXMuYXBwTW9kdWxlUmVmPy5pbmplY3Rvcik/LmdldChSb3V0ZXIpO1xuICAgIH1cblxuICAgIGdldEN1cnJlbnRSb3V0ZXJTdGF0ZVVybCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Um91dGVyKCk/LnJvdXRlclN0YXRlLnNuYXBzaG90LnVybDtcbiAgICB9XG5cbiAgICBuYXZpZ2F0ZUJ5VXJsKHVybDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJvdXRlciA9IHRoaXMuZ2V0Um91dGVyKCk7XG4gICAgICAgIHRoaXMubmdab25lPy5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgcm91dGVyPy5uYXZpZ2F0ZUJ5VXJsKHVybCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldENvbXBvbmVudEZhY3RvcnkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudEZhY3Rvcnk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudEZhY3Rvcnk6IFBsYW50Q29tcG9uZW50RmFjdG9yeSkge1xuICAgICAgICB0aGlzLmNvbXBvbmVudEZhY3RvcnkgPSBjb21wb25lbnRGYWN0b3J5O1xuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFwcE1vZHVsZVJlZiB8fCB0aGlzLmFwcFJlZikge1xuICAgICAgICAgICAgY29uc3Qgcm91dGVyID0gKHRoaXMuaW5qZWN0b3IgfHwgdGhpcy5hcHBNb2R1bGVSZWY/LmluamVjdG9yKT8uZ2V0KFJvdXRlcik7XG4gICAgICAgICAgICBpZiAocm91dGVyKSB7XG4gICAgICAgICAgICAgICAgcm91dGVyLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNhbmRib3gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNhbmRib3guZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hcHBNb2R1bGVSZWY/LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuYXBwTW9kdWxlUmVmID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5hcHBSZWY/LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuYXBwUmVmID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5pbmplY3RvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctcGxhbmV0LWFwcGxpY2F0aW9uLXJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYW5ldC9zcmMvYXBwbGljYXRpb24vbmctcGxhbmV0LWFwcGxpY2F0aW9uLXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtCLFdBQVcsRUFBRSxNQUFNLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBYyxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJeEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxrQkFBa0IsRUFBVyxNQUFNLGFBQWEsQ0FBQztBQXVCMUQsTUFBTSxPQUFPLHNCQUFzQjtJQVcvQixJQUFXLFFBQVE7UUFDZixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDZCxPQUFPLGtCQUFrQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQVcsWUFBWTtRQUNuQixPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxZQUFZLElBQVksRUFBRSxPQUEwQjtRQUNoRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1YsSUFB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SUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7UUFDOUIsQ0FBQztJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcGxpY2F0aW9uUmVmLCBOZ01vZHVsZVJlZiwgTmdab25lLCBFbnZpcm9ubWVudEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIsIE5hdmlnYXRpb25FbmQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFBsYW5ldFBvcnRhbEFwcGxpY2F0aW9uIH0gZnJvbSAnLi9wb3J0YWwtYXBwbGljYXRpb24nO1xuaW1wb3J0IHsgUGxhbnRDb21wb25lbnRDb25maWcgfSBmcm9tICcuLi9jb21wb25lbnQvcGxhbnQtY29tcG9uZW50LmNvbmZpZyc7XG5pbXBvcnQgeyBQbGFuZXRDb21wb25lbnRSZWYgfSBmcm9tICcuLi9jb21wb25lbnQvcGxhbmV0LWNvbXBvbmVudC1yZWYnO1xuaW1wb3J0IHsgZ2V0VGFnTmFtZUJ5VGVtcGxhdGUgfSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCB7IGdldFNhbmRib3hJbnN0YW5jZSwgU2FuZGJveCB9IGZyb20gJy4uL3NhbmRib3gvJztcbmltcG9ydCB7IFBsYW5ldEFwcGxpY2F0aW9uUmVmIH0gZnJvbSAnLi9wbGFuZXQtYXBwbGljYXRpb24tcmVmJztcblxuZXhwb3J0IHR5cGUgTmdCb290c3RyYXBBcHBNb2R1bGUgPSAoXG4gICAgcG9ydGFsQXBwOiBQbGFuZXRQb3J0YWxBcHBsaWNhdGlvblxuKSA9PiBQcm9taXNlPE5nTW9kdWxlUmVmPGFueT4gfCB2b2lkIHwgQXBwbGljYXRpb25SZWYgfCB1bmRlZmluZWQgfCBudWxsPjtcblxuZXhwb3J0IGludGVyZmFjZSBOZ0Jvb3RzdHJhcE9wdGlvbnMge1xuICAgIHRlbXBsYXRlOiBzdHJpbmc7XG4gICAgYm9vdHN0cmFwOiBOZ0Jvb3RzdHJhcEFwcE1vZHVsZTtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBwbGVhc2UgdXNlIE5nQm9vdHN0cmFwQXBwTW9kdWxlXG4gKi9cbmV4cG9ydCB0eXBlIEJvb3RzdHJhcEFwcE1vZHVsZSA9IE5nQm9vdHN0cmFwQXBwTW9kdWxlO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBwbGVhc2UgdXNlIE5nQm9vdHN0cmFwT3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJvb3RzdHJhcE9wdGlvbnMgZXh0ZW5kcyBOZ0Jvb3RzdHJhcE9wdGlvbnMge31cblxuZXhwb3J0IHR5cGUgUGxhbnRDb21wb25lbnRGYWN0b3J5ID0gPFREYXRhLCBUQ29tcD4oY29tcG9uZW50TmFtZTogc3RyaW5nLCBjb25maWc6IFBsYW50Q29tcG9uZW50Q29uZmlnPFREYXRhPikgPT4gUGxhbmV0Q29tcG9uZW50UmVmPFRDb21wPjtcblxuZXhwb3J0IGNsYXNzIE5nUGxhbmV0QXBwbGljYXRpb25SZWYgaW1wbGVtZW50cyBQbGFuZXRBcHBsaWNhdGlvblJlZiB7XG4gICAgcHJpdmF0ZSBpbmplY3Rvcj86IEVudmlyb25tZW50SW5qZWN0b3I7XG4gICAgcHJpdmF0ZSBhcHBSZWY/OiBBcHBsaWNhdGlvblJlZjtcbiAgICBwdWJsaWMgYXBwTW9kdWxlUmVmPzogTmdNb2R1bGVSZWY8YW55PjtcbiAgICBwdWJsaWMgdGVtcGxhdGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBpbm5lclNlbGVjdG9yPzogc3RyaW5nO1xuICAgIHByaXZhdGUgbmFtZTogc3RyaW5nO1xuICAgIHByaXZhdGUgcG9ydGFsQXBwITogUGxhbmV0UG9ydGFsQXBwbGljYXRpb247XG4gICAgcHJpdmF0ZSBhcHBNb2R1bGVCb290c3RyYXA/OiBOZ0Jvb3RzdHJhcEFwcE1vZHVsZTtcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3Rvcnk/OiBQbGFudENvbXBvbmVudEZhY3Rvcnk7XG5cbiAgICBwdWJsaWMgZ2V0IHNlbGVjdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbm5lclNlbGVjdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbmdab25lKCk6IE5nWm9uZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiAodGhpcy5pbmplY3RvciB8fCB0aGlzLmFwcE1vZHVsZVJlZj8uaW5qZWN0b3IpPy5nZXQoTmdab25lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNhbmRib3goKTogU2FuZGJveCB7XG4gICAgICAgIHJldHVybiBnZXRTYW5kYm94SW5zdGFuY2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGJvb3RzdHJhcHBlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuYXBwTW9kdWxlUmVmIHx8IHRoaXMuYXBwUmVmKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBCb290c3RyYXBPcHRpb25zKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlID0gb3B0aW9ucy50ZW1wbGF0ZTtcbiAgICAgICAgICAgIHRoaXMuaW5uZXJTZWxlY3RvciA9IHRoaXMudGVtcGxhdGUgPyBnZXRUYWdOYW1lQnlUZW1wbGF0ZSh0aGlzLnRlbXBsYXRlKSA6ICcnO1xuICAgICAgICAgICAgdGhpcy5hcHBNb2R1bGVCb290c3RyYXAgPSBvcHRpb25zLmJvb3RzdHJhcDtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGlzIGlzIGEgaGFjaywgc2luY2UgTmdab25lIGRvZXNuJ3QgYWxsb3cgeW91IHRvIGNvbmZpZ3VyZSB0aGUgcHJvcGVydHkgdGhhdCBpZGVudGlmaWVzIHlvdXIgem9uZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9QbGFjZU1lLVNBUy9zaW5nbGUtc3BhLWFuZ3VsYXItY2xpL2lzc3Vlcy8zMyxcbiAgICAgICAgLy8gTmdab25lLmlzSW5Bbmd1bGFyWm9uZSA9ICgpID0+IHtcbiAgICAgICAgLy8gICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgLy8gICAgIHJldHVybiB3aW5kb3cuWm9uZS5jdXJyZW50Ll9wcm9wZXJ0aWVzW2BuZ3gtcGxhbmV0LSR7bmFtZX1gXSA9PT0gdHJ1ZTtcbiAgICAgICAgLy8gfTtcbiAgICB9XG5cbiAgICAvLyDlrZDlupTnlKjot6/nlLHlj5jljJblkI7lkIzmraXkv67mlLkgcG9ydGFsIOeahCBSb3V0ZVxuICAgIHByaXZhdGUgc3luY1BvcnRhbFJvdXRlV2hlbk5hdmlnYXRpb25FbmQoKSB7XG4gICAgICAgIGNvbnN0IHJvdXRlciA9ICh0aGlzLmluamVjdG9yIHx8IHRoaXMuYXBwTW9kdWxlUmVmPy5pbmplY3Rvcik/LmdldChSb3V0ZXIpO1xuICAgICAgICBpZiAocm91dGVyKSB7XG4gICAgICAgICAgICByb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZT8ub25TdGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9ydGFsQXBwLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcnRhbEFwcC5yb3V0ZXIhLm5hdmlnYXRlQnlVcmwoZXZlbnQudXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYm9vdHN0cmFwKGFwcDogUGxhbmV0UG9ydGFsQXBwbGljYXRpb24pOiBPYnNlcnZhYmxlPHRoaXM+IHtcbiAgICAgICAgaWYgKCF0aGlzLmFwcE1vZHVsZUJvb3RzdHJhcCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBhcHAoJHt0aGlzLm5hbWV9KSBpcyBub3QgZGVmaW5lZGApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9ydGFsQXBwID0gYXBwO1xuICAgICAgICByZXR1cm4gZnJvbShcbiAgICAgICAgICAgIHRoaXMuYXBwTW9kdWxlQm9vdHN0cmFwKGFwcCkudGhlbihhcHBNb2R1bGVSZWYgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhcHBNb2R1bGVSZWZbJ2luc3RhbmNlJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBNb2R1bGVSZWYgPSBhcHBNb2R1bGVSZWYgYXMgTmdNb2R1bGVSZWY8YW55PjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBNb2R1bGVSZWYuaW5zdGFuY2UuYXBwTmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmplY3RvciA9IHRoaXMuYXBwTW9kdWxlUmVmLmluamVjdG9yO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwUmVmID0gYXBwTW9kdWxlUmVmIGFzIHVua25vd24gYXMgQXBwbGljYXRpb25SZWY7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5qZWN0b3IgPSB0aGlzLmFwcFJlZi5pbmplY3RvcjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlUmVmID0gdGhpcy5hcHBSZWYuaW5qZWN0b3IuZ2V0KE5nTW9kdWxlUmVmKTtcbiAgICAgICAgICAgICAgICAgICAgKG1vZHVsZVJlZiBhcyBhbnkpLmluc3RhbmNlID0geyBhcHBOYW1lOiB0aGlzLm5hbWUgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zeW5jUG9ydGFsUm91dGVXaGVuTmF2aWdhdGlvbkVuZCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRSb3V0ZXIoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5pbmplY3RvciB8fCB0aGlzLmFwcE1vZHVsZVJlZj8uaW5qZWN0b3IpPy5nZXQoUm91dGVyKTtcbiAgICB9XG5cbiAgICBnZXRDdXJyZW50Um91dGVyU3RhdGVVcmwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFJvdXRlcigpPy5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmw7XG4gICAgfVxuXG4gICAgbmF2aWdhdGVCeVVybCh1cmw6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCByb3V0ZXIgPSB0aGlzLmdldFJvdXRlcigpO1xuICAgICAgICB0aGlzLm5nWm9uZT8ucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHJvdXRlcj8ubmF2aWdhdGVCeVVybCh1cmwpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRDb21wb25lbnRGYWN0b3J5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wb25lbnRGYWN0b3J5O1xuICAgIH1cblxuICAgIHJlZ2lzdGVyQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnRGYWN0b3J5OiBQbGFudENvbXBvbmVudEZhY3RvcnkpIHtcbiAgICAgICAgdGhpcy5jb21wb25lbnRGYWN0b3J5ID0gY29tcG9uZW50RmFjdG9yeTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5hcHBNb2R1bGVSZWYgfHwgdGhpcy5hcHBSZWYpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlciA9ICh0aGlzLmluamVjdG9yIHx8IHRoaXMuYXBwTW9kdWxlUmVmPy5pbmplY3Rvcik/LmdldChSb3V0ZXIpO1xuICAgICAgICAgICAgaWYgKHJvdXRlcikge1xuICAgICAgICAgICAgICAgIHJvdXRlci5kaXNwb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zYW5kYm94KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zYW5kYm94LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYXBwTW9kdWxlUmVmPy5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLmFwcE1vZHVsZVJlZiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuYXBwUmVmPy5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLmFwcFJlZiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuaW5qZWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import { hashCode, isEmpty, getScriptsAndStylesFullPaths } from './helpers';
|
|
2
|
+
import { hashCode, isEmpty, getScriptsAndStylesFullPaths, getResourceFileName, getExtName, isObject, getAssetsBasePath } from './helpers';
|
|
3
3
|
import { of, Observable, forkJoin, concat } from 'rxjs';
|
|
4
4
|
import { map, switchMap, concatAll } from 'rxjs/operators';
|
|
5
5
|
import { HttpClient } from '@angular/common/http';
|
|
6
6
|
import { createSandbox } from './sandbox';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
import * as i1 from "@angular/common/http";
|
|
9
|
+
const STYLE_LINK_OR_SCRIPT_REG = /<[script|link].*?>/gi;
|
|
10
|
+
const LINK_OR_SRC_REG = /(src|href)=["'](.*?[\.js|\.css])["']/i;
|
|
9
11
|
export class AssetsLoader {
|
|
10
12
|
constructor(http) {
|
|
11
13
|
this.http = http;
|
|
@@ -179,10 +181,38 @@ export class AssetsLoader {
|
|
|
179
181
|
loadScriptsAndStyles(scripts = [], styles = [], options) {
|
|
180
182
|
return forkJoin([this.loadScripts(scripts, options), this.loadStyles(styles)]);
|
|
181
183
|
}
|
|
184
|
+
parseManifestFromHTML(html) {
|
|
185
|
+
const result = {};
|
|
186
|
+
const matchResult = html.match(STYLE_LINK_OR_SCRIPT_REG);
|
|
187
|
+
matchResult.forEach(item => {
|
|
188
|
+
const linkOrSrcResult = item.match(LINK_OR_SRC_REG);
|
|
189
|
+
if (linkOrSrcResult && linkOrSrcResult[2]) {
|
|
190
|
+
const src = linkOrSrcResult[2];
|
|
191
|
+
const hashName = getResourceFileName(src);
|
|
192
|
+
let barSplitIndex = hashName.indexOf('-');
|
|
193
|
+
let dotSplitIndex = hashName.indexOf('.');
|
|
194
|
+
const splitIndex = barSplitIndex > -1 ? barSplitIndex : dotSplitIndex;
|
|
195
|
+
if (splitIndex > -1) {
|
|
196
|
+
const name = hashName.slice(0, splitIndex);
|
|
197
|
+
const ext = getExtName(hashName);
|
|
198
|
+
result[ext ? `${name}.${ext}` : name] = src;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
return result;
|
|
203
|
+
}
|
|
182
204
|
loadAppAssets(app) {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
205
|
+
const basePath = getAssetsBasePath(app);
|
|
206
|
+
const manifest = app.entry ? (isObject(app.entry) ? app.entry.manifest : app.entry) : app.manifest;
|
|
207
|
+
if (manifest) {
|
|
208
|
+
const manifestExt = getExtName(manifest);
|
|
209
|
+
const isHtml = manifestExt === 'html';
|
|
210
|
+
const responseType = isHtml ? 'text' : 'json';
|
|
211
|
+
return this.loadManifest(`${manifest}?t=${new Date().getTime()}`, responseType).pipe(switchMap(manifestResult => {
|
|
212
|
+
if (responseType === 'text') {
|
|
213
|
+
manifestResult = this.parseManifestFromHTML(manifestResult);
|
|
214
|
+
}
|
|
215
|
+
const { scripts, styles } = getScriptsAndStylesFullPaths(app, basePath, manifestResult);
|
|
186
216
|
return this.loadScriptsAndStyles(scripts, styles, {
|
|
187
217
|
app: app.name,
|
|
188
218
|
sandbox: app.sandbox,
|
|
@@ -191,7 +221,7 @@ export class AssetsLoader {
|
|
|
191
221
|
}));
|
|
192
222
|
}
|
|
193
223
|
else {
|
|
194
|
-
const { scripts, styles } = getScriptsAndStylesFullPaths(app);
|
|
224
|
+
const { scripts, styles } = getScriptsAndStylesFullPaths(app, basePath);
|
|
195
225
|
return this.loadScriptsAndStyles(scripts, styles, {
|
|
196
226
|
app: app.name,
|
|
197
227
|
sandbox: app.sandbox,
|
|
@@ -199,8 +229,12 @@ export class AssetsLoader {
|
|
|
199
229
|
});
|
|
200
230
|
}
|
|
201
231
|
}
|
|
202
|
-
loadManifest(url) {
|
|
203
|
-
return this.http
|
|
232
|
+
loadManifest(url, responseType = 'json') {
|
|
233
|
+
return this.http
|
|
234
|
+
.get(url, {
|
|
235
|
+
responseType: responseType
|
|
236
|
+
})
|
|
237
|
+
.pipe(map((response) => {
|
|
204
238
|
return response;
|
|
205
239
|
}));
|
|
206
240
|
}
|
|
@@ -213,4 +247,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
213
247
|
providedIn: 'root'
|
|
214
248
|
}]
|
|
215
249
|
}], ctorParameters: () => [{ type: i1.HttpClient }] });
|
|
216
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLWxvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL3BsYW5ldC9zcmMvYXNzZXRzLWxvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFZLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxXQUFXLENBQUM7OztBQVkxQyxNQUFNLE9BQU8sWUFBWTtJQUdyQixZQUFvQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBRjVCLGtCQUFhLEdBQWEsRUFBRSxDQUFDO0lBRUUsQ0FBQztJQUV4QyxVQUFVLENBQUMsR0FBVztRQUNsQixNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sRUFBRSxDQUFDO2dCQUNOLEdBQUcsRUFBRSxHQUFHO2dCQUNSLFFBQVEsRUFBRSxFQUFFO2dCQUNaLE1BQU0sRUFBRSxJQUFJO2dCQUNaLE1BQU0sRUFBRSxRQUFRO2FBQ25CLENBQUMsQ0FBQztRQUNQLENBQUM7UUFDRCxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsUUFBb0MsRUFBRSxFQUFFO1lBQzNELE1BQU0sTUFBTSxHQUFzQixRQUFRLENBQUMs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QyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQ2xCLE9BQU8sUUFBUSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDOzhHQW5PUSxZQUFZO2tIQUFaLFlBQVksY0FGVCxNQUFNOzsyRkFFVCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGhhc2hDb2RlLCBpc0VtcHR5LCBnZXRTY3JpcHRzQW5kU3R5bGVzRnVsbFBhdGhzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IG9mLCBPYnNlcnZhYmxlLCBPYnNlcnZlciwgZm9ya0pvaW4sIGNvbmNhdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAsIGNvbmNhdEFsbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBQbGFuZXRBcHBsaWNhdGlvbiB9IGZyb20gJy4vcGxhbmV0LmNsYXNzJztcbmltcG9ydCB7IGNyZWF0ZVNhbmRib3ggfSBmcm9tICcuL3NhbmRib3gnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFzc2V0c0xvYWRSZXN1bHQge1xuICAgIHNyYzogc3RyaW5nO1xuICAgIGhhc2hDb2RlOiBudW1iZXI7XG4gICAgbG9hZGVkOiBib29sZWFuO1xuICAgIHN0YXR1czogc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFzc2V0c0xvYWRlciB7XG4gICAgcHJpdmF0ZSBsb2FkZWRTb3VyY2VzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxuXG4gICAgbG9hZFNjcmlwdChzcmM6IHN0cmluZyk6IE9ic2VydmFibGU8QXNzZXRzTG9hZFJlc3VsdD4ge1xuICAgICAgICBjb25zdCBpZCA9IGhhc2hDb2RlKHNyYyk7XG4gICAgICAgIGlmICh0aGlzLmxvYWRlZFNvdXJjZXMuaW5jbHVkZXMoaWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2Yoe1xuICAgICAgICAgICAgICAgIHNyYzogc3JjLFxuICAgICAgICAgICAgICAgIGhhc2hDb2RlOiBpZCxcbiAgICAgICAgICAgICAgICBsb2FkZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiAnTG9hZGVkJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcjogT2JzZXJ2ZXI8QXNzZXRzTG9hZFJlc3VsdD4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNjcmlwdDogSFRNTFNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgICAgIHNjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gICAgICAgICAgICBzY3JpcHQuc3JjID0gc3JjO1xuICAgICAgICAgICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChzY3JpcHRbJ3JlYWR5U3RhdGUnXSkge1xuICAgICAgICAgICAgICAgIC8vIElFXG4gICAgICAgICAgICAgICAgc2NyaXB0WydvbnJlYWR5c3RhdGVjaGFuZ2UnXSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjcmlwdFsncmVhZHlTdGF0ZSddID09PSAnbG9hZGVkJyB8fCBzY3JpcHRbJ3JlYWR5U3RhdGUnXSA9PT0gJ2NvbXBsZXRlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0WydvbnJlYWR5c3RhdGVjaGFuZ2UnXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM6IHNyYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogJ0xvYWRlZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGVkU291cmNlcy5wdXNoKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE90aGVyc1xuICAgICAgICAgICAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc3JjOiBzcmMsXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdMb2FkZWQnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZFNvdXJjZXMucHVzaChpZCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjcmlwdC5vbmVycm9yID0gZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgc3JjOiBzcmMsXG4gICAgICAgICAgICAgICAgICAgIGhhc2hDb2RlOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgbG9hZGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnRXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3JcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9hZFNjcmlwdFdpdGhTYW5kYm94KGFwcDogc3RyaW5nLCBzcmM6IHN0cmluZyk6IE9ic2VydmFibGU8QXNzZXRzTG9hZFJlc3VsdD4ge1xuICAgICAgICBjb25zdCBpZCA9IGhhc2hDb2RlKHNyYyk7XG4gICAgICAgIGlmICh0aGlzLmxvYWRlZFNvdXJjZXMuaW5jbHVkZXMoaWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2Yoe1xuICAgICAgICAgICAgICAgIHNyYzogc3JjLFxuICAgICAgICAgICAgICAgIGhhc2hDb2RlOiBpZCxcbiAgICAgICAgICAgICAgICBsb2FkZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiAnTG9hZGVkJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcjogT2JzZXJ2ZXI8QXNzZXRzTG9hZFJlc3VsdD4pID0+IHtcbiAgICAgICAgICAgIHRoaXMuaHR0cC5nZXQoc3JjLCB7IHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAoY29kZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGVkU291cmNlcy5wdXNoKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2FuZGJveCA9IGNyZWF0ZVNhbmRib3goYXBwKTtcbiAgICAgICAgICAgICAgICAgICAgc2FuZGJveC5leGVjU2NyaXB0KGNvZGUsIHNyYyk7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc3JjOiBzcmMsXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdMb2FkZWQnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcih7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcmM6IHNyYyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hDb2RlOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdFcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9hZFN0eWxlKHNyYzogc3RyaW5nKTogT2JzZXJ2YWJsZTxBc3NldHNMb2FkUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IGlkID0gaGFzaENvZGUoc3JjKTtcbiAgICAgICAgaWYgKHRoaXMubG9hZGVkU291cmNlcy5pbmNsdWRlcyhpZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBvZih7XG4gICAgICAgICAgICAgICAgc3JjOiBzcmMsXG4gICAgICAgICAgICAgICAgaGFzaENvZGU6IGlkLFxuICAgICAgICAgICAgICAgIGxvYWRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzdGF0dXM6ICdMb2FkZWQnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxBc3NldHNMb2FkUmVzdWx0PikgPT4ge1xuICAgICAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gICAgICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgICAgICAgbGluay5yZWwgPSAnc3R5bGVzaGVldCc7XG4gICAgICAgICAgICBsaW5rLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgICAgICAgICAgbGluay5ocmVmID0gc3JjO1xuICAgICAgICAgICAgbGluay5tZWRpYSA9ICdhbGwnO1xuICAgICAgICAgICAgbGluay5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgIHNyYzogc3JjLFxuICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogaWQsXG4gICAgICAgICAgICAgICAgICAgIGxvYWRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnTG9hZGVkJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkZWRTb3VyY2VzLnB1c2goaWQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxpbmsub25lcnJvciA9IGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIHNyYzogc3JjLFxuICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogaWQsXG4gICAgICAgICAgICAgICAgICAgIGxvYWRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnTG9hZGVkJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBoZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsb2FkU2NyaXB0cyhcbiAgICAgICAgc291cmNlczogc3RyaW5nW10sXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGFwcD86IHN0cmluZztcbiAgICAgICAgICAgIHNhbmRib3g/OiBib29sZWFuO1xuICAgICAgICAgICAgc2VyaWFsPzogYm9vbGVhbjtcbiAgICAgICAgfSA9IHtcbiAgICAgICAgICAgIHNlcmlhbDogZmFsc2UsXG4gICAgICAgICAgICBzYW5kYm94OiBmYWxzZVxuICAgICAgICB9XG4gICAgKTogT2JzZXJ2YWJsZTxBc3NldHNMb2FkUmVzdWx0W10+IHtcbiAgICAgICAgaWYgKGlzRW1wdHkoc291cmNlcykpIHtcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvYnNlcnZhYmxlcyA9IHNvdXJjZXMubWFwKHNyYyA9PiB7XG4gICAgICAgICAgICAvLyBUT0RPOiDmmoLml7blj6rmlK/mjIFQcm94eeaymeeusVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2FuZGJveCAmJiB3aW5kb3cuUHJveHkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkU2NyaXB0V2l0aFNhbmRib3gob3B0aW9ucy5hcHAsIHNyYyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRTY3JpcHQoc3JjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChvcHRpb25zLnNlcmlhbCkge1xuICAgICAgICAgICAgY29uc3QgYSA9IGNvbmNhdCguLi5vYnNlcnZhYmxlcykucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihbaXRlbV0pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGNvbmNhdEFsbCgpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ya0pvaW4ob2JzZXJ2YWJsZXMpLnBpcGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvYWRTdHlsZXMoc291cmNlczogc3RyaW5nW10pOiBPYnNlcnZhYmxlPEFzc2V0c0xvYWRSZXN1bHRbXT4ge1xuICAgICAgICBpZiAoaXNFbXB0eShzb3VyY2VzKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JrSm9pbihcbiAgICAgICAgICAgIHNvdXJjZXMubWFwKHNyYyA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZFN0eWxlKHNyYyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGxvYWRTY3JpcHRzQW5kU3R5bGVzKFxuICAgICAgICBzY3JpcHRzOiBzdHJpbmdbXSA9IFtdLFxuICAgICAgICBzdHlsZXM6IHN0cmluZ1tdID0gW10sXG4gICAgICAgIG9wdGlvbnM/OiB7XG4gICAgICAgICAgICBhcHA/OiBzdHJpbmc7XG4gICAgICAgICAgICBzYW5kYm94PzogYm9vbGVhbjtcbiAgICAgICAgICAgIHNlcmlhbD86IGJvb2xlYW47XG4gICAgICAgIH1cbiAgICApIHtcbiAgICAgICAgcmV0dXJuIGZvcmtKb2luKFt0aGlzLmxvYWRTY3JpcHRzKHNjcmlwdHMsIG9wdGlvbnMpLCB0aGlzLmxvYWRTdHlsZXMoc3R5bGVzKV0pO1xuICAgIH1cblxuICAgIGxvYWRBcHBBc3NldHMoYXBwOiBQbGFuZXRBcHBsaWNhdGlvbikge1xuICAgICAgICBpZiAoYXBwLm1hbmlmZXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkTWFuaWZlc3QoYCR7YXBwLm1hbmlmZXN0fT90PSR7bmV3IERhdGUoKS5nZXRUaW1lKCl9YCkucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAobWFuaWZlc3RSZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHNjcmlwdHMsIHN0eWxlcyB9ID0gZ2V0U2NyaXB0c0FuZFN0eWxlc0Z1bGxQYXRocyhhcHAsIG1hbmlmZXN0UmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZFNjcmlwdHNBbmRTdHlsZXMoc2NyaXB0cywgc3R5bGVzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHA6IGFwcC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2FuZGJveDogYXBwLnNhbmRib3gsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWw6IGFwcC5sb2FkU2VyaWFsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeyBzY3JpcHRzLCBzdHlsZXMgfSA9IGdldFNjcmlwdHNBbmRTdHlsZXNGdWxsUGF0aHMoYXBwKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRTY3JpcHRzQW5kU3R5bGVzKHNjcmlwdHMsIHN0eWxlcywge1xuICAgICAgICAgICAgICAgIGFwcDogYXBwLm5hbWUsXG4gICAgICAgICAgICAgICAgc2FuZGJveDogYXBwLnNhbmRib3gsXG4gICAgICAgICAgICAgICAgc2VyaWFsOiBhcHAubG9hZFNlcmlhbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkTWFuaWZlc3QodXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsKS5waXBlKFxuICAgICAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
|
|
250
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLWxvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL3BsYW5ldC9zcmMvYXNzZXRzLWxvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUksT0FBTyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQVksUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7O0FBRTFDLE1BQU0sd0JBQXdCLEdBQUcsc0JBQXNCLENBQUM7QUFDeEQsTUFBTSxlQUFlLEdBQUcsdUNBQXVDLENBQUM7QUFZaEUsTUFBTSxPQUFPLFlBQVk7SUFHckIsWUFBb0IsSUFBZ0I7UUFBaEIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUY1QixrQkFBYSxHQUFhLEVBQUUsQ0FBQztJQUVFLENBQUM7SUFFeEMsVUFBVSxDQUFDLEdBQVc7UUFDbEIsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNsQyxPQUFPLEVBQUUsQ0FBQztnQkFDTixHQUFHLEVBQUUsR0FBRztnQkFDUixRQUFRLEVBQUUsRUFBRTtnQkFDWixNQUFNLEVBQUUsSUFBSTtnQkFDWixNQUFNLEVB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cG9ydCB7IGhhc2hDb2RlLCBpc0VtcHR5LCBnZXRTY3JpcHRzQW5kU3R5bGVzRnVsbFBhdGhzLCBnZXRSZXNvdXJjZUZpbGVOYW1lLCBnZXRFeHROYW1lLCBpc09iamVjdCwgZ2V0QXNzZXRzQmFzZVBhdGggfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgb2YsIE9ic2VydmFibGUsIE9ic2VydmVyLCBmb3JrSm9pbiwgY29uY2F0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCwgY29uY2F0QWxsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFBsYW5ldEFwcGxpY2F0aW9uLCBQbGFuZXRBcHBsaWNhdGlvbkVudHJ5IH0gZnJvbSAnLi9wbGFuZXQuY2xhc3MnO1xuaW1wb3J0IHsgY3JlYXRlU2FuZGJveCB9IGZyb20gJy4vc2FuZGJveCc7XG5cbmNvbnN0IFNUWUxFX0xJTktfT1JfU0NSSVBUX1JFRyA9IC88W3NjcmlwdHxsaW5rXS4qPz4vZ2k7XG5jb25zdCBMSU5LX09SX1NSQ19SRUcgPSAvKHNyY3xocmVmKT1bXCInXSguKj9bXFwuanN8XFwuY3NzXSlbXCInXS9pO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFzc2V0c0xvYWRSZXN1bHQge1xuICAgIHNyYzogc3RyaW5nO1xuICAgIGhhc2hDb2RlOiBudW1iZXI7XG4gICAgbG9hZGVkOiBib29sZWFuO1xuICAgIHN0YXR1czogc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFzc2V0c0xvYWRlciB7XG4gICAgcHJpdmF0ZSBsb2FkZWRTb3VyY2VzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxuXG4gICAgbG9hZFNjcmlwdChzcmM6IHN0cmluZyk6IE9ic2VydmFibGU8QXNzZXRzTG9hZFJlc3VsdD4ge1xuICAgICAgICBjb25zdCBpZCA9IGhhc2hDb2RlKHNyYyk7XG4gICAgICAgIGlmICh0aGlzLmxvYWRlZFNvdXJjZXMuaW5jbHVkZXMoaWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2Yoe1xuICAgICAgICAgICAgICAgIHNyYzogc3JjLFxuICAgICAgICAgICAgICAgIGhhc2hDb2RlOiBpZCxcbiAgICAgICAgICAgICAgICBsb2FkZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiAnTG9hZGVkJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcjogT2JzZXJ2ZXI8QXNzZXRzTG9hZFJlc3VsdD4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNjcmlwdDogSFRNTFNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgICAgIHNjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gICAgICAgICAgICBzY3JpcHQuc3JjID0gc3JjO1xuICAgICAgICAgICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChzY3JpcHRbJ3JlYWR5U3RhdGUnXSkge1xuICAgICAgICAgICAgICAgIC8vIElFXG4gICAgICAgICAgICAgICAgc2NyaXB0WydvbnJlYWR5c3RhdGVjaGFuZ2UnXSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjcmlwdFsncmVhZHlTdGF0ZSddID09PSAnbG9hZGVkJyB8fCBzY3JpcHRbJ3JlYWR5U3RhdGUnXSA9PT0gJ2NvbXBsZXRlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0WydvbnJlYWR5c3RhdGVjaGFuZ2UnXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM6IHNyYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogJ0xvYWRlZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGVkU291cmNlcy5wdXNoKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE90aGVyc1xuICAgICAgICAgICAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc3JjOiBzcmMsXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdMb2FkZWQnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZFNvdXJjZXMucHVzaChpZCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjcmlwdC5vbmVycm9yID0gZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgc3JjOiBzcmMsXG4gICAgICAgICAgICAgICAgICAgIGhhc2hDb2RlOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgbG9hZGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnRXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3JcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9hZFNjcmlwdFdpdGhTYW5kYm94KGFwcDogc3RyaW5nLCBzcmM6IHN0cmluZyk6IE9ic2VydmFibGU8QXNzZXRzTG9hZFJlc3VsdD4ge1xuICAgICAgICBjb25zdCBpZCA9IGhhc2hDb2RlKHNyYyk7XG4gICAgICAgIGlmICh0aGlzLmxvYWRlZFNvdXJjZXMuaW5jbHVkZXMoaWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2Yoe1xuICAgICAgICAgICAgICAgIHNyYzogc3JjLFxuICAgICAgICAgICAgICAgIGhhc2hDb2RlOiBpZCxcbiAgICAgICAgICAgICAgICBsb2FkZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiAnTG9hZGVkJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcjogT2JzZXJ2ZXI8QXNzZXRzTG9hZFJlc3VsdD4pID0+IHtcbiAgICAgICAgICAgIHRoaXMuaHR0cC5nZXQoc3JjLCB7IHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAoY29kZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGVkU291cmNlcy5wdXNoKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2FuZGJveCA9IGNyZWF0ZVNhbmRib3goYXBwKTtcbiAgICAgICAgICAgICAgICAgICAgc2FuZGJveC5leGVjU2NyaXB0KGNvZGUsIHNyYyk7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc3JjOiBzcmMsXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdMb2FkZWQnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcih7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcmM6IHNyYyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hDb2RlOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdFcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9hZFN0eWxlKHNyYzogc3RyaW5nKTogT2JzZXJ2YWJsZTxBc3NldHNMb2FkUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IGlkID0gaGFzaENvZGUoc3JjKTtcbiAgICAgICAgaWYgKHRoaXMubG9hZGVkU291cmNlcy5pbmNsdWRlcyhpZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBvZih7XG4gICAgICAgICAgICAgICAgc3JjOiBzcmMsXG4gICAgICAgICAgICAgICAgaGFzaENvZGU6IGlkLFxuICAgICAgICAgICAgICAgIGxvYWRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzdGF0dXM6ICdMb2FkZWQnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxBc3NldHNMb2FkUmVzdWx0PikgPT4ge1xuICAgICAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gICAgICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgICAgICAgbGluay5yZWwgPSAnc3R5bGVzaGVldCc7XG4gICAgICAgICAgICBsaW5rLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgICAgICAgICAgbGluay5ocmVmID0gc3JjO1xuICAgICAgICAgICAgbGluay5tZWRpYSA9ICdhbGwnO1xuICAgICAgICAgICAgbGluay5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgIHNyYzogc3JjLFxuICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogaWQsXG4gICAgICAgICAgICAgICAgICAgIGxvYWRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnTG9hZGVkJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkZWRTb3VyY2VzLnB1c2goaWQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxpbmsub25lcnJvciA9IGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIHNyYzogc3JjLFxuICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogaWQsXG4gICAgICAgICAgICAgICAgICAgIGxvYWRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnTG9hZGVkJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBoZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsb2FkU2NyaXB0cyhcbiAgICAgICAgc291cmNlczogc3RyaW5nW10sXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGFwcD86IHN0cmluZztcbiAgICAgICAgICAgIHNhbmRib3g/OiBib29sZWFuO1xuICAgICAgICAgICAgc2VyaWFsPzogYm9vbGVhbjtcbiAgICAgICAgfSA9IHtcbiAgICAgICAgICAgIHNlcmlhbDogZmFsc2UsXG4gICAgICAgICAgICBzYW5kYm94OiBmYWxzZVxuICAgICAgICB9XG4gICAgKTogT2JzZXJ2YWJsZTxBc3NldHNMb2FkUmVzdWx0W10+IHtcbiAgICAgICAgaWYgKGlzRW1wdHkoc291cmNlcykpIHtcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvYnNlcnZhYmxlcyA9IHNvdXJjZXMubWFwKHNyYyA9PiB7XG4gICAgICAgICAgICAvLyBUT0RPOiDmmoLml7blj6rmlK/mjIFQcm94eeaymeeusVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2FuZGJveCAmJiB3aW5kb3cuUHJveHkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkU2NyaXB0V2l0aFNhbmRib3gob3B0aW9ucy5hcHAsIHNyYyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRTY3JpcHQoc3JjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChvcHRpb25zLnNlcmlhbCkge1xuICAgICAgICAgICAgY29uc3QgYSA9IGNvbmNhdCguLi5vYnNlcnZhYmxlcykucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihbaXRlbV0pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGNvbmNhdEFsbCgpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ya0pvaW4ob2JzZXJ2YWJsZXMpLnBpcGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvYWRTdHlsZXMoc291cmNlczogc3RyaW5nW10pOiBPYnNlcnZhYmxlPEFzc2V0c0xvYWRSZXN1bHRbXT4ge1xuICAgICAgICBpZiAoaXNFbXB0eShzb3VyY2VzKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JrSm9pbihcbiAgICAgICAgICAgIHNvdXJjZXMubWFwKHNyYyA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZFN0eWxlKHNyYyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGxvYWRTY3JpcHRzQW5kU3R5bGVzKFxuICAgICAgICBzY3JpcHRzOiBzdHJpbmdbXSA9IFtdLFxuICAgICAgICBzdHlsZXM6IHN0cmluZ1tdID0gW10sXG4gICAgICAgIG9wdGlvbnM/OiB7XG4gICAgICAgICAgICBhcHA/OiBzdHJpbmc7XG4gICAgICAgICAgICBzYW5kYm94PzogYm9vbGVhbjtcbiAgICAgICAgICAgIHNlcmlhbD86IGJvb2xlYW47XG4gICAgICAgIH1cbiAgICApIHtcbiAgICAgICAgcmV0dXJuIGZvcmtKb2luKFt0aGlzLmxvYWRTY3JpcHRzKHNjcmlwdHMsIG9wdGlvbnMpLCB0aGlzLmxvYWRTdHlsZXMoc3R5bGVzKV0pO1xuICAgIH1cblxuICAgIHBhcnNlTWFuaWZlc3RGcm9tSFRNTChodG1sOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIGNvbnN0IG1hdGNoUmVzdWx0ID0gaHRtbC5tYXRjaChTVFlMRV9MSU5LX09SX1NDUklQVF9SRUcpO1xuICAgICAgICBtYXRjaFJlc3VsdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgbGlua09yU3JjUmVzdWx0ID0gaXRlbS5tYXRjaChMSU5LX09SX1NSQ19SRUcpO1xuICAgICAgICAgICAgaWYgKGxpbmtPclNyY1Jlc3VsdCAmJiBsaW5rT3JTcmNSZXN1bHRbMl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcmMgPSBsaW5rT3JTcmNSZXN1bHRbMl07XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzaE5hbWUgPSBnZXRSZXNvdXJjZUZpbGVOYW1lKHNyYyk7XG4gICAgICAgICAgICAgICAgbGV0IGJhclNwbGl0SW5kZXggPSBoYXNoTmFtZS5pbmRleE9mKCctJyk7XG4gICAgICAgICAgICAgICAgbGV0IGRvdFNwbGl0SW5kZXggPSBoYXNoTmFtZS5pbmRleE9mKCcuJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BsaXRJbmRleCA9IGJhclNwbGl0SW5kZXggPiAtMSA/IGJhclNwbGl0SW5kZXggOiBkb3RTcGxpdEluZGV4O1xuICAgICAgICAgICAgICAgIGlmIChzcGxpdEluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IGhhc2hOYW1lLnNsaWNlKDAsIHNwbGl0SW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHQgPSBnZXRFeHROYW1lKGhhc2hOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2V4dCA/IGAke25hbWV9LiR7ZXh0fWAgOiBuYW1lXSA9IHNyYztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGxvYWRBcHBBc3NldHMoYXBwOiBQbGFuZXRBcHBsaWNhdGlvbikge1xuICAgICAgICBjb25zdCBiYXNlUGF0aCA9IGdldEFzc2V0c0Jhc2VQYXRoKGFwcCk7XG4gICAgICAgIGNvbnN0IG1hbmlmZXN0ID0gYXBwLmVudHJ5ID8gKGlzT2JqZWN0PFBsYW5ldEFwcGxpY2F0aW9uRW50cnk+KGFwcC5lbnRyeSkgPyBhcHAuZW50cnkubWFuaWZlc3QgOiBhcHAuZW50cnkpIDogYXBwLm1hbmlmZXN0O1xuICAgICAgICBpZiAobWFuaWZlc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hbmlmZXN0RXh0ID0gZ2V0RXh0TmFtZShtYW5pZmVzdCk7XG4gICAgICAgICAgICBjb25zdCBpc0h0bWwgPSBtYW5pZmVzdEV4dCA9PT0gJ2h0bWwnO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VUeXBlID0gaXNIdG1sID8gJ3RleHQnIDogJ2pzb24nO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZE1hbmlmZXN0KGAke21hbmlmZXN0fT90PSR7bmV3IERhdGUoKS5nZXRUaW1lKCl9YCwgcmVzcG9uc2VUeXBlKS5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChtYW5pZmVzdFJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZVR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3RSZXN1bHQgPSB0aGlzLnBhcnNlTWFuaWZlc3RGcm9tSFRNTChtYW5pZmVzdFJlc3VsdCBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgc2NyaXB0cywgc3R5bGVzIH0gPSBnZXRTY3JpcHRzQW5kU3R5bGVzRnVsbFBhdGhzKGFwcCwgYmFzZVBhdGgsIG1hbmlmZXN0UmVzdWx0IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkU2NyaXB0c0FuZFN0eWxlcyhzY3JpcHRzLCBzdHlsZXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcDogYXBwLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzYW5kYm94OiBhcHAuc2FuZGJveCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbDogYXBwLmxvYWRTZXJpYWxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB7IHNjcmlwdHMsIHN0eWxlcyB9ID0gZ2V0U2NyaXB0c0FuZFN0eWxlc0Z1bGxQYXRocyhhcHAsIGJhc2VQYXRoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRTY3JpcHRzQW5kU3R5bGVzKHNjcmlwdHMsIHN0eWxlcywge1xuICAgICAgICAgICAgICAgIGFwcDogYXBwLm5hbWUsXG4gICAgICAgICAgICAgICAgc2FuZGJveDogYXBwLnNhbmRib3gsXG4gICAgICAgICAgICAgICAgc2VyaWFsOiBhcHAubG9hZFNlcmlhbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkTWFuaWZlc3QodXJsOiBzdHJpbmcsIHJlc3BvbnNlVHlwZTogJ3RleHQnIHwgJ2pzb24nID0gJ2pzb24nKTogT2JzZXJ2YWJsZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgc3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5nZXQodXJsLCB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiByZXNwb25zZVR5cGUgYXMgJ2pzb24nXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
|