@c8y/ng1-modules 1021.60.1 → 1021.62.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/core/locales/de.po +35 -25
- package/core/locales/es.po +35 -25
- package/core/locales/fr.po +35 -25
- package/core/locales/ja_JP.po +35 -25
- package/core/locales/ko.po +35 -25
- package/core/locales/nl.po +35 -25
- package/core/locales/pl.po +35 -25
- package/core/locales/pt_BR.po +35 -25
- package/core/locales/zh_CN.po +35 -25
- package/core/locales/zh_TW.po +35 -25
- package/package.json +1 -1
- package/tenants/controllers/customProperties.js +0 -1
- package/tenants/controllers/detail.js +0 -1
- package/tenants/cumulocity.json +0 -13
- package/tenants/index.js +0 -1
- package/tenants/index.mock.js +0 -1
- package/tenants/views/customProperties.html +0 -65
- package/tenants/views/detail.html +0 -481
|
@@ -1,481 +0,0 @@
|
|
|
1
|
-
<c8y-ui-title-set title="tenant.company"></c8y-ui-title-set>
|
|
2
|
-
|
|
3
|
-
<c8y-breadcrumbs-set>
|
|
4
|
-
<c8y-breadcrumbs-item
|
|
5
|
-
icon="c8y-sub-tenants"
|
|
6
|
-
path="#tenants"
|
|
7
|
-
label="{{ 'Subtenants' | translate }}"
|
|
8
|
-
></c8y-breadcrumbs-item>
|
|
9
|
-
<c8y-breadcrumbs-item
|
|
10
|
-
icon="c8y-sub-tenants"
|
|
11
|
-
label="{{ 'Tenants' | translate }}"
|
|
12
|
-
></c8y-breadcrumbs-item>
|
|
13
|
-
</c8y-breadcrumbs-set>
|
|
14
|
-
|
|
15
|
-
<form
|
|
16
|
-
name="tenantForm"
|
|
17
|
-
autocomplete="off"
|
|
18
|
-
novalidate
|
|
19
|
-
>
|
|
20
|
-
<div class="card content-fullpage d-grid grid__col--8-4--md">
|
|
21
|
-
<div class="inner-scroll bg-level-0">
|
|
22
|
-
<div class="card-header separator large-padding sticky-top">
|
|
23
|
-
<div
|
|
24
|
-
class="card-title"
|
|
25
|
-
translate
|
|
26
|
-
>
|
|
27
|
-
Identification
|
|
28
|
-
</div>
|
|
29
|
-
</div>
|
|
30
|
-
<div class="card-block large-padding">
|
|
31
|
-
<div
|
|
32
|
-
class="form-group"
|
|
33
|
-
ng-if="!isNew || ((!isNew || !host) && !isEnterpriseEditionTenant)"
|
|
34
|
-
>
|
|
35
|
-
<label translate>ID</label>
|
|
36
|
-
<input
|
|
37
|
-
class="form-control"
|
|
38
|
-
placeholder="{{ 'e.g. my-tenant`used in URL`' | translate }}"
|
|
39
|
-
name="id"
|
|
40
|
-
type="text"
|
|
41
|
-
required
|
|
42
|
-
ng-model="tenant.id"
|
|
43
|
-
ng-pattern="validation.tenantId.pattern"
|
|
44
|
-
ng-maxlength="32"
|
|
45
|
-
ng-disabled="!isNew"
|
|
46
|
-
/>
|
|
47
|
-
<span
|
|
48
|
-
class="help-block"
|
|
49
|
-
ng-if="isNew && !(tenantForm.id.$touched && tenantForm.id.$invalid)"
|
|
50
|
-
>
|
|
51
|
-
{{ tenantIdDomainHelpText | translate }}
|
|
52
|
-
</span>
|
|
53
|
-
<c8y-error-feedback field="tenantForm.id">
|
|
54
|
-
<span ng-message="pattern">
|
|
55
|
-
{{ validation.tenantId.message | translate }}
|
|
56
|
-
</span>
|
|
57
|
-
</c8y-error-feedback>
|
|
58
|
-
</div>
|
|
59
|
-
|
|
60
|
-
<div
|
|
61
|
-
class="form-group"
|
|
62
|
-
ng-if="isNew && host"
|
|
63
|
-
>
|
|
64
|
-
<label translate>Domain/URL</label>
|
|
65
|
-
<div class="input-group">
|
|
66
|
-
<input
|
|
67
|
-
class="form-control"
|
|
68
|
-
placeholder="{{ 'e.g. my-tenant`used in URL`' | translate }}"
|
|
69
|
-
name="id"
|
|
70
|
-
type="text"
|
|
71
|
-
required
|
|
72
|
-
ng-model="tenant.id"
|
|
73
|
-
ng-pattern="validation.tenantId.pattern"
|
|
74
|
-
ng-maxlength="32"
|
|
75
|
-
/>
|
|
76
|
-
<span class="input-group-addon">
|
|
77
|
-
{{ host }}
|
|
78
|
-
</span>
|
|
79
|
-
</div>
|
|
80
|
-
<span
|
|
81
|
-
class="help-block"
|
|
82
|
-
ng-if="!(tenantForm.id.$touched && tenantForm.id.$invalid)"
|
|
83
|
-
>
|
|
84
|
-
{{ tenantIdDomainHelpText | translate }}
|
|
85
|
-
</span>
|
|
86
|
-
<c8y-error-feedback field="tenantForm.id">
|
|
87
|
-
<span ng-message="pattern">
|
|
88
|
-
{{ validation.tenantId.message | translate }}
|
|
89
|
-
</span>
|
|
90
|
-
</c8y-error-feedback>
|
|
91
|
-
</div>
|
|
92
|
-
|
|
93
|
-
<div
|
|
94
|
-
class="form-group"
|
|
95
|
-
ng-if="!isNew || !host"
|
|
96
|
-
>
|
|
97
|
-
<label translate>Domain/URL</label>
|
|
98
|
-
<input
|
|
99
|
-
class="form-control"
|
|
100
|
-
placeholder="{{ 'e.g. my-tenant.example.com' | translate }}"
|
|
101
|
-
name="domain"
|
|
102
|
-
type="text"
|
|
103
|
-
required
|
|
104
|
-
ng-model="tenant.domain"
|
|
105
|
-
ng-pattern="validation.domain.pattern"
|
|
106
|
-
ng-maxlength="256"
|
|
107
|
-
ng-disabled="!isNew"
|
|
108
|
-
/>
|
|
109
|
-
<span
|
|
110
|
-
class="help-block"
|
|
111
|
-
ng-if="isNew && !(tenantForm.id.$touched && tenantForm.id.$invalid)"
|
|
112
|
-
>
|
|
113
|
-
{{ tenantIdDomainHelpText | translate }}
|
|
114
|
-
</span>
|
|
115
|
-
<c8y-error-feedback field="tenantForm.domain">
|
|
116
|
-
<span ng-message="pattern">
|
|
117
|
-
{{ validation.domain.message | translate }}
|
|
118
|
-
</span>
|
|
119
|
-
</c8y-error-feedback>
|
|
120
|
-
</div>
|
|
121
|
-
|
|
122
|
-
<div class="form-group">
|
|
123
|
-
<label translate>Name</label>
|
|
124
|
-
<input
|
|
125
|
-
class="form-control"
|
|
126
|
-
placeholder="{{ 'e.g. Company A' | translate }}"
|
|
127
|
-
name="company"
|
|
128
|
-
type="text"
|
|
129
|
-
required
|
|
130
|
-
ng-model="tenant.company"
|
|
131
|
-
ng-maxlength="256"
|
|
132
|
-
/>
|
|
133
|
-
<c8y-error-feedback field="tenantForm.company"></c8y-error-feedback>
|
|
134
|
-
</div>
|
|
135
|
-
|
|
136
|
-
<div class="form-group">
|
|
137
|
-
<label
|
|
138
|
-
for="contactName"
|
|
139
|
-
translate
|
|
140
|
-
>
|
|
141
|
-
Contact name
|
|
142
|
-
</label>
|
|
143
|
-
<input
|
|
144
|
-
class="form-control"
|
|
145
|
-
id="contactName"
|
|
146
|
-
name="contactName"
|
|
147
|
-
type="text"
|
|
148
|
-
ng-model="tenant.contactName"
|
|
149
|
-
ng-maxlength="30"
|
|
150
|
-
/>
|
|
151
|
-
<c8y-error-feedback field="tenantForm.contactName"></c8y-error-feedback>
|
|
152
|
-
</div>
|
|
153
|
-
|
|
154
|
-
<div class="form-group">
|
|
155
|
-
<label translate>Contact phone</label>
|
|
156
|
-
<input
|
|
157
|
-
class="form-control"
|
|
158
|
-
placeholder="{{ 'e.g. +49 9 876 543 210`LOCALIZE`' | translate }}"
|
|
159
|
-
name="contactPhone"
|
|
160
|
-
type="text"
|
|
161
|
-
c8y-autocomplete="off"
|
|
162
|
-
c8y-phone-number
|
|
163
|
-
ng-model="tenant.contactPhone"
|
|
164
|
-
ng-required="true"
|
|
165
|
-
ng-maxlength="20"
|
|
166
|
-
/>
|
|
167
|
-
<c8y-error-feedback field="tenantForm.contactPhone"></c8y-error-feedback>
|
|
168
|
-
</div>
|
|
169
|
-
|
|
170
|
-
<div class="form-group">
|
|
171
|
-
<label><span translate>Administrator's email</span></label>
|
|
172
|
-
<input
|
|
173
|
-
class="form-control"
|
|
174
|
-
placeholder="{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}"
|
|
175
|
-
name="adminEmail"
|
|
176
|
-
type="email"
|
|
177
|
-
ng-model="tenant.adminEmail"
|
|
178
|
-
ng-maxlength="256"
|
|
179
|
-
c8y-autocomplete="off"
|
|
180
|
-
ng-required="true"
|
|
181
|
-
ng-disabled="!isNew"
|
|
182
|
-
/>
|
|
183
|
-
<c8y-error-feedback field="tenantForm.adminEmail"></c8y-error-feedback>
|
|
184
|
-
</div>
|
|
185
|
-
|
|
186
|
-
<div class="form-group">
|
|
187
|
-
<label><span translate>Administrator's username</span></label>
|
|
188
|
-
<input
|
|
189
|
-
class="form-control"
|
|
190
|
-
placeholder="{{ 'e.g. joe`LOCALIZE`' | translate }}"
|
|
191
|
-
name="adminName"
|
|
192
|
-
type="text"
|
|
193
|
-
ng-model="tenant.adminName"
|
|
194
|
-
ng-maxlength="256"
|
|
195
|
-
ng-required="true"
|
|
196
|
-
ng-disabled="!isNew"
|
|
197
|
-
ng-pattern="validation.user.pattern"
|
|
198
|
-
c8y-autocomplete="off"
|
|
199
|
-
/>
|
|
200
|
-
<c8y-error-feedback field="tenantForm.adminName">
|
|
201
|
-
<span ng-message="pattern">
|
|
202
|
-
{{ validation.user.message | translate }}
|
|
203
|
-
</span>
|
|
204
|
-
</c8y-error-feedback>
|
|
205
|
-
</div>
|
|
206
|
-
|
|
207
|
-
<div
|
|
208
|
-
class="form-group"
|
|
209
|
-
ng-if="isNew"
|
|
210
|
-
>
|
|
211
|
-
<label
|
|
212
|
-
class="c8y-checkbox"
|
|
213
|
-
title="{{ 'Send password reset link as email' | translate }}"
|
|
214
|
-
>
|
|
215
|
-
<input
|
|
216
|
-
name="sendPasswordResetEmail"
|
|
217
|
-
type="checkbox"
|
|
218
|
-
ng-model="tenant.sendPasswordResetEmail"
|
|
219
|
-
ng-click="tenant.adminPass = null; $parent.confirmPassword = null;"
|
|
220
|
-
/>
|
|
221
|
-
<span></span>
|
|
222
|
-
<span>{{ 'Send password reset link as email' | translate }}</span>
|
|
223
|
-
</label>
|
|
224
|
-
</div>
|
|
225
|
-
|
|
226
|
-
<div ng-if="!tenant.sendPasswordResetEmail">
|
|
227
|
-
<div
|
|
228
|
-
class="row content-flex-50"
|
|
229
|
-
ng-if="isNew"
|
|
230
|
-
>
|
|
231
|
-
<div class="col-7">
|
|
232
|
-
<div class="form-group">
|
|
233
|
-
<label><span translate>Administrator's password</span></label>
|
|
234
|
-
<input
|
|
235
|
-
class="form-control"
|
|
236
|
-
name="adminPass"
|
|
237
|
-
type="password"
|
|
238
|
-
required
|
|
239
|
-
ng-model="tenant.adminPass"
|
|
240
|
-
ng-change="changePasswordConfirm()"
|
|
241
|
-
ng-pattern="validation.password.pattern"
|
|
242
|
-
ng-disabled="!isNew && !tenant.adminName"
|
|
243
|
-
c8y-autocomplete="off"
|
|
244
|
-
/>
|
|
245
|
-
<c8y-error-feedback field="tenantForm.adminPass">
|
|
246
|
-
<span ng-message="pattern">
|
|
247
|
-
{{ validation.password.message | translate }}
|
|
248
|
-
</span>
|
|
249
|
-
<span
|
|
250
|
-
ng-message="password-strength"
|
|
251
|
-
translate
|
|
252
|
-
>
|
|
253
|
-
Password is not strong enough, use a stronger password. Check the requirements
|
|
254
|
-
listed on the right.
|
|
255
|
-
</span>
|
|
256
|
-
</c8y-error-feedback>
|
|
257
|
-
</div>
|
|
258
|
-
|
|
259
|
-
<div class="form-group">
|
|
260
|
-
<label translate>Confirm password</label>
|
|
261
|
-
<input
|
|
262
|
-
class="form-control"
|
|
263
|
-
name="confirmPassword"
|
|
264
|
-
type="password"
|
|
265
|
-
required
|
|
266
|
-
ng-init="$parent.confirmPassword = ''"
|
|
267
|
-
ng-model="$parent.confirmPassword"
|
|
268
|
-
ng-change="changePasswordConfirm()"
|
|
269
|
-
c8y-autocomplete="off"
|
|
270
|
-
/>
|
|
271
|
-
<c8y-error-feedback field="tenantForm.confirmPassword">
|
|
272
|
-
<span
|
|
273
|
-
ng-message="password-mismatch"
|
|
274
|
-
translate
|
|
275
|
-
>
|
|
276
|
-
Passwords do not match.
|
|
277
|
-
</span>
|
|
278
|
-
</c8y-error-feedback>
|
|
279
|
-
</div>
|
|
280
|
-
</div>
|
|
281
|
-
<div class="col-5">
|
|
282
|
-
<div class="m-t-32">
|
|
283
|
-
<c8y-password-strength-checklist
|
|
284
|
-
password="tenantForm.adminPass.$viewValue"
|
|
285
|
-
strength-enforced="passwordStrengthEnforced"
|
|
286
|
-
requirements-fulfilled="onRequirementsFulfilledChange(value)"
|
|
287
|
-
></c8y-password-strength-checklist>
|
|
288
|
-
</div>
|
|
289
|
-
</div>
|
|
290
|
-
</div>
|
|
291
|
-
</div>
|
|
292
|
-
<div
|
|
293
|
-
class="form-group"
|
|
294
|
-
ng-if="storageLimitation.storageLimitFeatureEnabled"
|
|
295
|
-
>
|
|
296
|
-
<div class="checkbox">
|
|
297
|
-
<label title="{{ 'Limit storage per device' | translate }}">
|
|
298
|
-
<input
|
|
299
|
-
name="storageLimitPerDeviceEnabled"
|
|
300
|
-
type="checkbox"
|
|
301
|
-
ng-model="storageLimitation.storageLimitPerDeviceEnabled"
|
|
302
|
-
/>
|
|
303
|
-
<span></span>
|
|
304
|
-
<span>{{ 'Limit storage per device' | translate }}</span>
|
|
305
|
-
</label>
|
|
306
|
-
</div>
|
|
307
|
-
</div>
|
|
308
|
-
|
|
309
|
-
<div
|
|
310
|
-
class="form-group"
|
|
311
|
-
ng-if="
|
|
312
|
-
storageLimitation.storageLimitFeatureEnabled &&
|
|
313
|
-
storageLimitation.storageLimitPerDeviceEnabled
|
|
314
|
-
"
|
|
315
|
-
>
|
|
316
|
-
<label
|
|
317
|
-
class="m-r-8"
|
|
318
|
-
translate
|
|
319
|
-
>
|
|
320
|
-
Storage limit per device (MB)
|
|
321
|
-
</label>
|
|
322
|
-
<input
|
|
323
|
-
class="form-control"
|
|
324
|
-
style="max-width: 300px"
|
|
325
|
-
placeholder="{{ 'e.g.' | translate }} 256"
|
|
326
|
-
name="storageLimitPerDevice"
|
|
327
|
-
type="number"
|
|
328
|
-
required
|
|
329
|
-
ng-model="tenant.storageLimitPerDevice"
|
|
330
|
-
min="1"
|
|
331
|
-
max="{{ maxStorageLimitPerDevice }}"
|
|
332
|
-
/>
|
|
333
|
-
<c8y-error-feedback field="tenantForm.storageLimitPerDevice"></c8y-error-feedback>
|
|
334
|
-
</div>
|
|
335
|
-
|
|
336
|
-
<div
|
|
337
|
-
class="form-group"
|
|
338
|
-
ng-if="selectTenantPolicy"
|
|
339
|
-
>
|
|
340
|
-
<label translate>Tenant policy</label>
|
|
341
|
-
<div class="c8y-select-wrapper">
|
|
342
|
-
<select
|
|
343
|
-
class="form-control"
|
|
344
|
-
title="{{ 'Tenant policy' | translate }}"
|
|
345
|
-
name="tenantPolicyId"
|
|
346
|
-
ng-model="tenant.tenantPolicyId"
|
|
347
|
-
ng-options="policy.id as policy.name for policy in tenantPolicies"
|
|
348
|
-
></select>
|
|
349
|
-
<span></span>
|
|
350
|
-
</div>
|
|
351
|
-
</div>
|
|
352
|
-
|
|
353
|
-
<div
|
|
354
|
-
class="form-group"
|
|
355
|
-
ng-if="shouldShowSubtenantCheckbox()"
|
|
356
|
-
>
|
|
357
|
-
<label
|
|
358
|
-
class="c8y-checkbox"
|
|
359
|
-
title="{{ 'Allow creation of subtenants' | translate }}"
|
|
360
|
-
>
|
|
361
|
-
<input
|
|
362
|
-
name="allowCreateTenants"
|
|
363
|
-
type="checkbox"
|
|
364
|
-
ng-model="tenant.allowCreateTenants"
|
|
365
|
-
/>
|
|
366
|
-
<span></span>
|
|
367
|
-
<span>{{ 'Allow creation of subtenants' | translate }}</span>
|
|
368
|
-
</label>
|
|
369
|
-
</div>
|
|
370
|
-
</div>
|
|
371
|
-
</div>
|
|
372
|
-
<div
|
|
373
|
-
class="inner-scroll bg-level-1"
|
|
374
|
-
ng-if="!isNew"
|
|
375
|
-
>
|
|
376
|
-
<div class="card-header separator sticky-top large-padding">
|
|
377
|
-
<div class="card-title fit-w">
|
|
378
|
-
<i
|
|
379
|
-
class="c8y-icon c8y-icon-c8y-support"
|
|
380
|
-
ng-class="{ 'c8y-icon-duocolor': tenant.supportUser.enabled }"
|
|
381
|
-
></i>
|
|
382
|
-
{{ 'Support user access' | translate }}
|
|
383
|
-
</div>
|
|
384
|
-
<a
|
|
385
|
-
class="btn btn-default btn-xs"
|
|
386
|
-
title="{{ 'Log in' | translate }}"
|
|
387
|
-
target="_blank"
|
|
388
|
-
rel="noopener noreferrer"
|
|
389
|
-
ng-if="tenant.supportUser.enabled && supportUser && isTopTenant"
|
|
390
|
-
ng-href="//{{ tenant.domain }}/apps/administration/?user={{ supportUser }}"
|
|
391
|
-
>
|
|
392
|
-
<i c8y-icon="external-link"></i>
|
|
393
|
-
{{ 'Log in' | translate }}
|
|
394
|
-
</a>
|
|
395
|
-
</div>
|
|
396
|
-
<div class="card-block large-padding">
|
|
397
|
-
<div class="form-group">
|
|
398
|
-
<label>{{ 'Status' | translate }}</label>
|
|
399
|
-
<div>
|
|
400
|
-
<p class="form-control-static">
|
|
401
|
-
<span
|
|
402
|
-
title="{{ 'Disabled' | translate }}"
|
|
403
|
-
ng-if="!tenant.supportUser.enabled"
|
|
404
|
-
>
|
|
405
|
-
<i
|
|
406
|
-
class="text-danger"
|
|
407
|
-
c8y-icon="ban"
|
|
408
|
-
></i>
|
|
409
|
-
{{ 'Disabled' | translate }}
|
|
410
|
-
</span>
|
|
411
|
-
<span
|
|
412
|
-
title="{{ 'Enabled' | translate }}"
|
|
413
|
-
ng-if="tenant.supportUser.enabled"
|
|
414
|
-
>
|
|
415
|
-
<i
|
|
416
|
-
class="text-success"
|
|
417
|
-
c8y-icon="check-circle"
|
|
418
|
-
></i>
|
|
419
|
-
{{ 'Enabled' | translate }}
|
|
420
|
-
</span>
|
|
421
|
-
</p>
|
|
422
|
-
</div>
|
|
423
|
-
</div>
|
|
424
|
-
<div class="form-group">
|
|
425
|
-
<label>{{ 'Active requests count' | translate }}</label>
|
|
426
|
-
|
|
427
|
-
<p class="form-control-static">
|
|
428
|
-
<span ng-if="tenant.supportUser.activeRequestCount">
|
|
429
|
-
<span class="badge badge-danger">
|
|
430
|
-
{{ tenant.supportUser.activeRequestCount }}
|
|
431
|
-
</span>
|
|
432
|
-
</span>
|
|
433
|
-
<span
|
|
434
|
-
ng-if="!tenant.supportUser.enabled && tenant.supportUser.activeRequestCount === 0"
|
|
435
|
-
>
|
|
436
|
-
{{ 'No active requests' | translate }}
|
|
437
|
-
</span>
|
|
438
|
-
<span ng-if="tenant.supportUser.enabled && tenant.supportUser.activeRequestCount === 0">
|
|
439
|
-
{{ 'Not applicable' | translate }}
|
|
440
|
-
</span>
|
|
441
|
-
</p>
|
|
442
|
-
</div>
|
|
443
|
-
<div
|
|
444
|
-
class="form-group"
|
|
445
|
-
ng-if="tenant.supportUser.enabled"
|
|
446
|
-
>
|
|
447
|
-
<label>{{ 'Expiry date' | translate }}</label>
|
|
448
|
-
<div>
|
|
449
|
-
<p class="form-control-static">
|
|
450
|
-
<span ng-if="tenant.supportUser.expiryDate">
|
|
451
|
-
{{ tenant.supportUser.expiryDate | absoluteDateTimeShort }}
|
|
452
|
-
</span>
|
|
453
|
-
<span ng-if="!tenant.supportUser.expiryDate">{{ 'No limit' | translate }}</span>
|
|
454
|
-
</p>
|
|
455
|
-
</div>
|
|
456
|
-
</div>
|
|
457
|
-
</div>
|
|
458
|
-
</div>
|
|
459
|
-
<div class="card-footer separator large-padding grid__col--fullspan">
|
|
460
|
-
<button
|
|
461
|
-
class="btn btn-default"
|
|
462
|
-
title="{{ 'Cancel' | translate }}"
|
|
463
|
-
type="button"
|
|
464
|
-
ng-click="cancel()"
|
|
465
|
-
c8y-key-shortcut="Escape"
|
|
466
|
-
>
|
|
467
|
-
{{ 'Cancel' | translate }}
|
|
468
|
-
</button>
|
|
469
|
-
<button
|
|
470
|
-
class="btn btn-primary save-tenant-prop"
|
|
471
|
-
title="{{ 'Save' | translate }}"
|
|
472
|
-
type="submit"
|
|
473
|
-
ng-click="save(tenant, tenantForm)"
|
|
474
|
-
ng-show="tenant"
|
|
475
|
-
ng-disabled="tenantForm.$invalid || !tenantForm.$dirty || saveInProgress || !requirementsFulfilled"
|
|
476
|
-
>
|
|
477
|
-
{{ 'Save' | translate }}
|
|
478
|
-
</button>
|
|
479
|
-
</div>
|
|
480
|
-
</div>
|
|
481
|
-
</form>
|