@atlaskit/jql-editor 6.4.6 → 6.4.7
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 +9 -0
- package/dist/cjs/analytics/util.js +1 -1
- package/dist/cjs/state/hydration/index.js +15 -15
- package/dist/cjs/ui/jql-editor-controls-content/base-syntax-help/styled.js +1 -1
- package/dist/cjs/ui/jql-editor-layout/styled.js +1 -1
- package/dist/cjs/ui/jql-editor-view/index.js +1 -2
- package/dist/es2019/analytics/util.js +1 -1
- package/dist/es2019/ui/jql-editor-controls-content/base-syntax-help/styled.js +1 -1
- package/dist/es2019/ui/jql-editor-layout/styled.js +1 -1
- package/dist/es2019/ui/jql-editor-view/index.js +1 -4
- package/dist/esm/analytics/util.js +1 -1
- package/dist/esm/state/hydration/index.js +15 -15
- package/dist/esm/ui/jql-editor-controls-content/base-syntax-help/styled.js +1 -1
- package/dist/esm/ui/jql-editor-layout/styled.js +1 -1
- package/dist/esm/ui/jql-editor-view/index.js +1 -2
- package/package.json +6 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# @atlaskit/jql-editor
|
|
2
2
|
|
|
3
|
+
## 6.4.7
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`87ab60401cc1d`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/87ab60401cc1d) -
|
|
8
|
+
Cleanup feature gate `empanda_jql-editor_fix_tab_select_in_popup`. The JQL editor input now always
|
|
9
|
+
sets `tabindex="0"` so it is reliably focusable when rendered inside a popup.
|
|
10
|
+
- Updated dependencies
|
|
11
|
+
|
|
3
12
|
## 6.4.6
|
|
4
13
|
|
|
5
14
|
### Patch Changes
|
|
@@ -6,5 +6,5 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.useJqlEditorAnalytics = void 0;
|
|
7
7
|
var _jqlEditorCommon = require("@atlaskit/jql-editor-common");
|
|
8
8
|
var useJqlEditorAnalytics = exports.useJqlEditorAnalytics = function useJqlEditorAnalytics(analyticsSource) {
|
|
9
|
-
return (0, _jqlEditorCommon.useJqlPackageAnalytics)(analyticsSource, "@atlaskit/jql-editor", "6.4.
|
|
9
|
+
return (0, _jqlEditorCommon.useJqlPackageAnalytics)(analyticsSource, "@atlaskit/jql-editor", "6.4.6", _jqlEditorCommon.ANALYTICS_CHANNEL);
|
|
10
10
|
};
|
|
@@ -19,19 +19,19 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
19
19
|
var hydrateQuery = exports.hydrateQuery = function hydrateQuery() {
|
|
20
20
|
return /*#__PURE__*/function () {
|
|
21
21
|
var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(_ref, _ref2) {
|
|
22
|
-
var setState, getState, dispatch, onHydrate, _getState, query, oldHydratedValues, enableRichInlineNodes, editorState, queryToHydrate, jast, visitor, newHydratedValues, hydratedValuesMap;
|
|
23
|
-
return _regenerator.default.wrap(function
|
|
22
|
+
var setState, getState, dispatch, onHydrate, _getState, query, oldHydratedValues, enableRichInlineNodes, editorState, queryToHydrate, jast, visitor, newHydratedValues, hydratedValuesMap, _t;
|
|
23
|
+
return _regenerator.default.wrap(function (_context) {
|
|
24
24
|
while (1) switch (_context.prev = _context.next) {
|
|
25
25
|
case 0:
|
|
26
26
|
setState = _ref.setState, getState = _ref.getState, dispatch = _ref.dispatch;
|
|
27
27
|
onHydrate = _ref2.onHydrate;
|
|
28
28
|
_getState = getState(), query = _getState.query, oldHydratedValues = _getState.hydratedValues, enableRichInlineNodes = _getState.enableRichInlineNodes, editorState = _getState.editorState;
|
|
29
29
|
if (!(!enableRichInlineNodes || !onHydrate || !query)) {
|
|
30
|
-
_context.next =
|
|
30
|
+
_context.next = 1;
|
|
31
31
|
break;
|
|
32
32
|
}
|
|
33
33
|
return _context.abrupt("return");
|
|
34
|
-
case
|
|
34
|
+
case 1:
|
|
35
35
|
queryToHydrate = query;
|
|
36
36
|
jast = (0, _jqlAst.getJastFromState)(editorState); // Hydration API will fail for syntactically invalid queries, including partial queries. We do want to hydrate those
|
|
37
37
|
// as well to be able to handle queries like `assignee in (abc-123-def`, so we build an equivalent valid query.
|
|
@@ -40,15 +40,15 @@ var hydrateQuery = exports.hydrateQuery = function hydrateQuery() {
|
|
|
40
40
|
queryToHydrate = jast.query.accept(visitor);
|
|
41
41
|
}
|
|
42
42
|
if (queryToHydrate) {
|
|
43
|
-
_context.next =
|
|
43
|
+
_context.next = 2;
|
|
44
44
|
break;
|
|
45
45
|
}
|
|
46
46
|
return _context.abrupt("return");
|
|
47
|
-
case
|
|
48
|
-
_context.prev =
|
|
49
|
-
_context.next =
|
|
47
|
+
case 2:
|
|
48
|
+
_context.prev = 2;
|
|
49
|
+
_context.next = 3;
|
|
50
50
|
return onHydrate(queryToHydrate);
|
|
51
|
-
case
|
|
51
|
+
case 3:
|
|
52
52
|
newHydratedValues = _context.sent;
|
|
53
53
|
// IMPORTANT: Field name keys must be normalised (unquoted + lowercased) when storing hydrated values.
|
|
54
54
|
// The hydration API returns field names in a canonical format (e.g. 'Project[AtlassianProject]'),
|
|
@@ -70,16 +70,16 @@ var hydrateQuery = exports.hydrateQuery = function hydrateQuery() {
|
|
|
70
70
|
hydratedValues: hydratedValuesMap
|
|
71
71
|
});
|
|
72
72
|
dispatch(replaceHydratedValuesWithRichInlineNodes());
|
|
73
|
-
_context.next =
|
|
73
|
+
_context.next = 5;
|
|
74
74
|
break;
|
|
75
|
-
case
|
|
76
|
-
_context.prev =
|
|
77
|
-
|
|
78
|
-
case
|
|
75
|
+
case 4:
|
|
76
|
+
_context.prev = 4;
|
|
77
|
+
_t = _context["catch"](2);
|
|
78
|
+
case 5:
|
|
79
79
|
case "end":
|
|
80
80
|
return _context.stop();
|
|
81
81
|
}
|
|
82
|
-
}, _callee, null, [[
|
|
82
|
+
}, _callee, null, [[2, 4]]);
|
|
83
83
|
}));
|
|
84
84
|
return function (_x, _x2) {
|
|
85
85
|
return _ref3.apply(this, arguments);
|
|
@@ -33,7 +33,7 @@ _styled.default.div({
|
|
|
33
33
|
},
|
|
34
34
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors -- Ignored via go/DSP-18766
|
|
35
35
|
'&[disabled]': {
|
|
36
|
-
background: "var(--ds-background-disabled, #
|
|
36
|
+
background: "var(--ds-background-disabled, #0515240F)"
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
});
|
|
@@ -97,7 +97,7 @@ function (props) {
|
|
|
97
97
|
var ReadOnlyEditorViewContainer = exports.ReadOnlyEditorViewContainer =
|
|
98
98
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-styled, @atlaskit/ui-styling-standard/no-exported-styles -- Ignored via go/DSP-18766
|
|
99
99
|
(0, _styled.default)(EditorViewContainer)({
|
|
100
|
-
backgroundColor: "var(--ds-background-disabled, #
|
|
100
|
+
backgroundColor: "var(--ds-background-disabled, #0515240F)",
|
|
101
101
|
color: "var(--ds-text-disabled, #080F214A)",
|
|
102
102
|
pointerEvents: 'none'
|
|
103
103
|
});
|
|
@@ -10,7 +10,6 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
|
|
|
10
10
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
11
|
var _react = _interopRequireWildcard(require("react"));
|
|
12
12
|
var _throttle = _interopRequireDefault(require("lodash/throttle"));
|
|
13
|
-
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
14
13
|
var _constants = require("../../common/constants");
|
|
15
14
|
var _useEditorTheme = require("../../hooks/use-editor-theme");
|
|
16
15
|
var _useEditorViewIsInvalid = require("../../hooks/use-editor-view-is-invalid");
|
|
@@ -129,7 +128,7 @@ var JQLEditorView = function JQLEditorView(_ref) {
|
|
|
129
128
|
'aria-activedescendant': selectedOptionId
|
|
130
129
|
}), editorViewIsInvalid && {
|
|
131
130
|
'aria-invalid': 'true'
|
|
132
|
-
}),
|
|
131
|
+
}), {}, {
|
|
133
132
|
tabindex: '0'
|
|
134
133
|
});
|
|
135
134
|
}, [editorId, isAutocompleteOpen, intl, autocompleteId, editorViewIsInvalid, validationId, helpContentId, selectedOptionId]);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { ANALYTICS_CHANNEL, useJqlPackageAnalytics } from '@atlaskit/jql-editor-common';
|
|
2
2
|
export const useJqlEditorAnalytics = analyticsSource => {
|
|
3
|
-
return useJqlPackageAnalytics(analyticsSource, "@atlaskit/jql-editor", "6.4.
|
|
3
|
+
return useJqlPackageAnalytics(analyticsSource, "@atlaskit/jql-editor", "6.4.6", ANALYTICS_CHANNEL);
|
|
4
4
|
};
|
|
@@ -25,7 +25,7 @@ styled.div({
|
|
|
25
25
|
},
|
|
26
26
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors -- Ignored via go/DSP-18766
|
|
27
27
|
'&[disabled]': {
|
|
28
|
-
background: "var(--ds-background-disabled, #
|
|
28
|
+
background: "var(--ds-background-disabled, #0515240F)"
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
});
|
|
@@ -121,7 +121,7 @@ css({
|
|
|
121
121
|
export const ReadOnlyEditorViewContainer =
|
|
122
122
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-styled, @atlaskit/ui-styling-standard/no-exported-styles -- Ignored via go/DSP-18766
|
|
123
123
|
styled(EditorViewContainer)({
|
|
124
|
-
backgroundColor: "var(--ds-background-disabled, #
|
|
124
|
+
backgroundColor: "var(--ds-background-disabled, #0515240F)",
|
|
125
125
|
color: "var(--ds-text-disabled, #080F214A)",
|
|
126
126
|
pointerEvents: 'none'
|
|
127
127
|
});
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import React, { useCallback, useEffect, useImperativeHandle, useMemo, useRef } from 'react';
|
|
2
2
|
import throttle from 'lodash/throttle';
|
|
3
|
-
import { fg } from '@atlaskit/platform-feature-flags';
|
|
4
3
|
import { JQL_EDITOR_AUTOCOMPLETE_ID, JQL_EDITOR_HELP_CONTENT_ID, JQL_EDITOR_INPUT_ID, JQL_EDITOR_MAIN_ID, JQL_EDITOR_VALIDATION_ID } from '../../common/constants';
|
|
5
4
|
import { useEditorThemeContext } from '../../hooks/use-editor-theme';
|
|
6
5
|
import { useEditorViewIsInvalid } from '../../hooks/use-editor-view-is-invalid';
|
|
@@ -99,9 +98,7 @@ const JQLEditorView = ({
|
|
|
99
98
|
...(editorViewIsInvalid && {
|
|
100
99
|
'aria-invalid': 'true'
|
|
101
100
|
}),
|
|
102
|
-
|
|
103
|
-
tabindex: '0'
|
|
104
|
-
})
|
|
101
|
+
tabindex: '0'
|
|
105
102
|
};
|
|
106
103
|
}, [editorId, isAutocompleteOpen, intl, autocompleteId, editorViewIsInvalid, validationId, helpContentId, selectedOptionId]);
|
|
107
104
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { ANALYTICS_CHANNEL, useJqlPackageAnalytics } from '@atlaskit/jql-editor-common';
|
|
2
2
|
export var useJqlEditorAnalytics = function useJqlEditorAnalytics(analyticsSource) {
|
|
3
|
-
return useJqlPackageAnalytics(analyticsSource, "@atlaskit/jql-editor", "6.4.
|
|
3
|
+
return useJqlPackageAnalytics(analyticsSource, "@atlaskit/jql-editor", "6.4.6", ANALYTICS_CHANNEL);
|
|
4
4
|
};
|
|
@@ -12,19 +12,19 @@ import { normaliseHydrationKey, ValidQueryVisitor } from './util';
|
|
|
12
12
|
export var hydrateQuery = function hydrateQuery() {
|
|
13
13
|
return /*#__PURE__*/function () {
|
|
14
14
|
var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref, _ref2) {
|
|
15
|
-
var setState, getState, dispatch, onHydrate, _getState, query, oldHydratedValues, enableRichInlineNodes, editorState, queryToHydrate, jast, visitor, newHydratedValues, hydratedValuesMap;
|
|
16
|
-
return _regeneratorRuntime.wrap(function
|
|
15
|
+
var setState, getState, dispatch, onHydrate, _getState, query, oldHydratedValues, enableRichInlineNodes, editorState, queryToHydrate, jast, visitor, newHydratedValues, hydratedValuesMap, _t;
|
|
16
|
+
return _regeneratorRuntime.wrap(function (_context) {
|
|
17
17
|
while (1) switch (_context.prev = _context.next) {
|
|
18
18
|
case 0:
|
|
19
19
|
setState = _ref.setState, getState = _ref.getState, dispatch = _ref.dispatch;
|
|
20
20
|
onHydrate = _ref2.onHydrate;
|
|
21
21
|
_getState = getState(), query = _getState.query, oldHydratedValues = _getState.hydratedValues, enableRichInlineNodes = _getState.enableRichInlineNodes, editorState = _getState.editorState;
|
|
22
22
|
if (!(!enableRichInlineNodes || !onHydrate || !query)) {
|
|
23
|
-
_context.next =
|
|
23
|
+
_context.next = 1;
|
|
24
24
|
break;
|
|
25
25
|
}
|
|
26
26
|
return _context.abrupt("return");
|
|
27
|
-
case
|
|
27
|
+
case 1:
|
|
28
28
|
queryToHydrate = query;
|
|
29
29
|
jast = getJastFromState(editorState); // Hydration API will fail for syntactically invalid queries, including partial queries. We do want to hydrate those
|
|
30
30
|
// as well to be able to handle queries like `assignee in (abc-123-def`, so we build an equivalent valid query.
|
|
@@ -33,15 +33,15 @@ export var hydrateQuery = function hydrateQuery() {
|
|
|
33
33
|
queryToHydrate = jast.query.accept(visitor);
|
|
34
34
|
}
|
|
35
35
|
if (queryToHydrate) {
|
|
36
|
-
_context.next =
|
|
36
|
+
_context.next = 2;
|
|
37
37
|
break;
|
|
38
38
|
}
|
|
39
39
|
return _context.abrupt("return");
|
|
40
|
-
case
|
|
41
|
-
_context.prev =
|
|
42
|
-
_context.next =
|
|
40
|
+
case 2:
|
|
41
|
+
_context.prev = 2;
|
|
42
|
+
_context.next = 3;
|
|
43
43
|
return onHydrate(queryToHydrate);
|
|
44
|
-
case
|
|
44
|
+
case 3:
|
|
45
45
|
newHydratedValues = _context.sent;
|
|
46
46
|
// IMPORTANT: Field name keys must be normalised (unquoted + lowercased) when storing hydrated values.
|
|
47
47
|
// The hydration API returns field names in a canonical format (e.g. 'Project[AtlassianProject]'),
|
|
@@ -63,16 +63,16 @@ export var hydrateQuery = function hydrateQuery() {
|
|
|
63
63
|
hydratedValues: hydratedValuesMap
|
|
64
64
|
});
|
|
65
65
|
dispatch(replaceHydratedValuesWithRichInlineNodes());
|
|
66
|
-
_context.next =
|
|
66
|
+
_context.next = 5;
|
|
67
67
|
break;
|
|
68
|
-
case
|
|
69
|
-
_context.prev =
|
|
70
|
-
|
|
71
|
-
case
|
|
68
|
+
case 4:
|
|
69
|
+
_context.prev = 4;
|
|
70
|
+
_t = _context["catch"](2);
|
|
71
|
+
case 5:
|
|
72
72
|
case "end":
|
|
73
73
|
return _context.stop();
|
|
74
74
|
}
|
|
75
|
-
}, _callee, null, [[
|
|
75
|
+
}, _callee, null, [[2, 4]]);
|
|
76
76
|
}));
|
|
77
77
|
return function (_x, _x2) {
|
|
78
78
|
return _ref3.apply(this, arguments);
|
|
@@ -25,7 +25,7 @@ styled.div({
|
|
|
25
25
|
},
|
|
26
26
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors -- Ignored via go/DSP-18766
|
|
27
27
|
'&[disabled]': {
|
|
28
|
-
background: "var(--ds-background-disabled, #
|
|
28
|
+
background: "var(--ds-background-disabled, #0515240F)"
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
});
|
|
@@ -92,7 +92,7 @@ function (props) {
|
|
|
92
92
|
export var ReadOnlyEditorViewContainer =
|
|
93
93
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-styled, @atlaskit/ui-styling-standard/no-exported-styles -- Ignored via go/DSP-18766
|
|
94
94
|
styled(EditorViewContainer)({
|
|
95
|
-
backgroundColor: "var(--ds-background-disabled, #
|
|
95
|
+
backgroundColor: "var(--ds-background-disabled, #0515240F)",
|
|
96
96
|
color: "var(--ds-text-disabled, #080F214A)",
|
|
97
97
|
pointerEvents: 'none'
|
|
98
98
|
});
|
|
@@ -4,7 +4,6 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
|
|
|
4
4
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
5
5
|
import React, { useCallback, useEffect, useImperativeHandle, useMemo, useRef } from 'react';
|
|
6
6
|
import throttle from 'lodash/throttle';
|
|
7
|
-
import { fg } from '@atlaskit/platform-feature-flags';
|
|
8
7
|
import { JQL_EDITOR_AUTOCOMPLETE_ID, JQL_EDITOR_HELP_CONTENT_ID, JQL_EDITOR_INPUT_ID, JQL_EDITOR_MAIN_ID, JQL_EDITOR_VALIDATION_ID } from '../../common/constants';
|
|
9
8
|
import { useEditorThemeContext } from '../../hooks/use-editor-theme';
|
|
10
9
|
import { useEditorViewIsInvalid } from '../../hooks/use-editor-view-is-invalid';
|
|
@@ -122,7 +121,7 @@ var JQLEditorView = function JQLEditorView(_ref) {
|
|
|
122
121
|
'aria-activedescendant': selectedOptionId
|
|
123
122
|
}), editorViewIsInvalid && {
|
|
124
123
|
'aria-invalid': 'true'
|
|
125
|
-
}),
|
|
124
|
+
}), {}, {
|
|
126
125
|
tabindex: '0'
|
|
127
126
|
});
|
|
128
127
|
}, [editorId, isAutocompleteOpen, intl, autocompleteId, editorViewIsInvalid, validationId, helpContentId, selectedOptionId]);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/jql-editor",
|
|
3
|
-
"version": "6.4.
|
|
3
|
+
"version": "6.4.7",
|
|
4
4
|
"description": "This package allows consumers to render an advanced JQL editor component to enable autocomplete-assisted authoring and validation of JQL queries.",
|
|
5
5
|
"author": "Atlassian Pty Ltd",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -46,11 +46,11 @@
|
|
|
46
46
|
"@atlaskit/button": "^23.11.0",
|
|
47
47
|
"@atlaskit/css": "^0.19.0",
|
|
48
48
|
"@atlaskit/editor-prosemirror": "^7.3.0",
|
|
49
|
-
"@atlaskit/emoji": "^70.
|
|
49
|
+
"@atlaskit/emoji": "^70.14.0",
|
|
50
50
|
"@atlaskit/feature-gate-js-client": "^5.7.0",
|
|
51
51
|
"@atlaskit/form": "^15.5.0",
|
|
52
|
-
"@atlaskit/icon": "^35.
|
|
53
|
-
"@atlaskit/icon-lab": "^6.
|
|
52
|
+
"@atlaskit/icon": "^35.3.0",
|
|
53
|
+
"@atlaskit/icon-lab": "^6.12.0",
|
|
54
54
|
"@atlaskit/jql-ast": "^3.5.0",
|
|
55
55
|
"@atlaskit/jql-autocomplete": "^2.1.0",
|
|
56
56
|
"@atlaskit/jql-editor-common": "^3.3.0",
|
|
@@ -63,8 +63,8 @@
|
|
|
63
63
|
"@atlaskit/spinner": "^19.1.0",
|
|
64
64
|
"@atlaskit/teams-avatar": "^2.7.0",
|
|
65
65
|
"@atlaskit/theme": "^25.0.0",
|
|
66
|
-
"@atlaskit/tokens": "^13.
|
|
67
|
-
"@atlaskit/tooltip": "^22.
|
|
66
|
+
"@atlaskit/tokens": "^13.1.0",
|
|
67
|
+
"@atlaskit/tooltip": "^22.5.0",
|
|
68
68
|
"@atlaskit/townsquare-emoji-provider": "^1.0.0",
|
|
69
69
|
"@babel/runtime": "^7.0.0",
|
|
70
70
|
"@emotion/react": "^11.7.1",
|
|
@@ -152,9 +152,6 @@
|
|
|
152
152
|
},
|
|
153
153
|
"jira_ai_agent_avatar_with_apptype_for_jql": {
|
|
154
154
|
"type": "boolean"
|
|
155
|
-
},
|
|
156
|
-
"empanda_jql-editor_fix_tab_select_in_popup": {
|
|
157
|
-
"type": "boolean"
|
|
158
155
|
}
|
|
159
156
|
}
|
|
160
157
|
}
|