homebridge-carrier-infinity 1.8.1 → 1.9.0-beta.1
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/.devcontainer/.uix-hb-service-homebridge-startup.json.example +5 -0
- package/.devcontainer/config.json.example +2 -1
- package/.devcontainer/setup-homebridge.sh +6 -0
- package/CLAUDE.md +28 -21
- package/dist/accessory_base.d.ts +2 -2
- package/dist/accessory_base.d.ts.map +1 -1
- package/dist/accessory_base.js.map +1 -1
- package/dist/api/graphql_client.d.ts +71 -0
- package/dist/api/graphql_client.d.ts.map +1 -0
- package/dist/api/graphql_client.js +261 -0
- package/dist/api/graphql_client.js.map +1 -0
- package/dist/api/graphql_operations.d.ts +56 -0
- package/dist/api/graphql_operations.d.ts.map +1 -0
- package/dist/api/graphql_operations.js +325 -0
- package/dist/api/graphql_operations.js.map +1 -0
- package/dist/api/interface_graphql_mutations.d.ts +149 -0
- package/dist/api/interface_graphql_mutations.d.ts.map +1 -0
- package/dist/api/interface_graphql_mutations.js +8 -0
- package/dist/api/interface_graphql_mutations.js.map +1 -0
- package/dist/api/interface_graphql_system.d.ts +287 -0
- package/dist/api/interface_graphql_system.d.ts.map +1 -0
- package/dist/api/interface_graphql_system.js +9 -0
- package/dist/api/interface_graphql_system.js.map +1 -0
- package/dist/api/models_graphql.d.ts +167 -0
- package/dist/api/models_graphql.d.ts.map +1 -0
- package/dist/api/models_graphql.js +590 -0
- package/dist/api/models_graphql.js.map +1 -0
- package/dist/api/oauth2.d.ts +45 -0
- package/dist/api/oauth2.d.ts.map +1 -0
- package/dist/api/oauth2.js +35 -0
- package/dist/api/oauth2.js.map +1 -0
- package/dist/characteristics_base.d.ts +2 -2
- package/dist/characteristics_base.d.ts.map +1 -1
- package/dist/characteristics_base.js.map +1 -1
- package/dist/platform.d.ts +4 -4
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +7 -12
- package/dist/platform.js.map +1 -1
- package/dist/settings.d.ts +6 -3
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +7 -4
- package/dist/settings.js.map +1 -1
- package/eslint.config.mjs +93 -2
- package/package.json +3 -6
- package/dist/api/comodo-aaa-root.pem +0 -25
- package/dist/api/interface_config.d.ts +0 -185
- package/dist/api/interface_config.d.ts.map +0 -1
- package/dist/api/interface_config.js +0 -5
- package/dist/api/interface_config.js.map +0 -1
- package/dist/api/interface_locations.d.ts +0 -45
- package/dist/api/interface_locations.d.ts.map +0 -1
- package/dist/api/interface_locations.js +0 -5
- package/dist/api/interface_locations.js.map +0 -1
- package/dist/api/interface_profile.d.ts +0 -80
- package/dist/api/interface_profile.d.ts.map +0 -1
- package/dist/api/interface_profile.js +0 -5
- package/dist/api/interface_profile.js.map +0 -1
- package/dist/api/interface_status.d.ts +0 -90
- package/dist/api/interface_status.d.ts.map +0 -1
- package/dist/api/interface_status.js +0 -5
- package/dist/api/interface_status.js.map +0 -1
- package/dist/api/models.d.ts +0 -111
- package/dist/api/models.d.ts.map +0 -1
- package/dist/api/models.js +0 -572
- package/dist/api/models.js.map +0 -1
- package/dist/api/oauth.d.ts +0 -6
- package/dist/api/oauth.d.ts.map +0 -1
- package/dist/api/oauth.js +0 -49
- package/dist/api/oauth.js.map +0 -1
- package/dist/api/rest_client.d.ts +0 -15
- package/dist/api/rest_client.d.ts.map +0 -1
- package/dist/api/rest_client.js +0 -135
- package/dist/api/rest_client.js.map +0 -1
package/dist/api/oauth.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/api/oauth.ts"],"names":[],"mappings":";;;;;;AAAA,0CAAsF;AAEtF,oDAA4B;AAE5B,2CAAkC;AAElC,MAAa,YAAY;IACvB,MAAM,CAAC,SAAS,CAAC,UAAkB,EAAE,GAAW,EAAE,QAAgB,EAAE,KAAa,EAAE,IAAmB;QACpG,4BAA4B;QAC5B,MAAM,iBAAiB,GAAG;YACxB,kBAAkB,EAAG,oCAAyB;YAC9C,WAAW,EAAG,QAAQ;YACtB,sBAAsB,EAAG,WAAW;YACpC,eAAe,EAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YAC/C,WAAW,EAAG,gBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACvD,aAAa,EAAG,KAAK;SACtB,CAAC;QAEF,+CAA+C;QAC/C,MAAM,eAAe,GAAG,EAAE,CAAC;QAC3B,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC9B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACjC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,iBAAiB,EAAE,eAAe,CAAC,CAAC;QAEzE,eAAe;QACf,MAAM,SAAS,GAAG,IAAA,iBAAI,EACpB,iBAAiB,CAAC,wBAAwB,CAAC,EAC3C,UAAU,EACV,SAAS,GAAG,GAAG,EACf,UAAU,EACV,uCAA4B,EAC5B,KAAK,CACN,CAAC;QACF,mBAAmB;QACnB,MAAM,aAAa,GAAG;YACpB,SAAS,kBAAkB,CAAC,GAAG,CAAC,EAAE;SACnC,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;YAClC,aAAa,CAAC,IAAI,CAChB,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CACxB,CAAC;QACJ,CAAC;QACD,aAAa,CAAC,IAAI,CAAC,mBAAmB,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACvE,OAAO,SAAS,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,MAAkC,EAAE,QAAgB,EAAE,KAAa;QAClF,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,IAAI,KAAK,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1H,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAjDD,oCAiDC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { AxiosInstance } from 'axios';
|
|
2
|
-
import { Logger } from 'homebridge';
|
|
3
|
-
export declare class InfinityRestClient {
|
|
4
|
-
username: string;
|
|
5
|
-
private password;
|
|
6
|
-
readonly log: Logger;
|
|
7
|
-
private access_token;
|
|
8
|
-
axios: AxiosInstance;
|
|
9
|
-
constructor(username: string, password: string, log: Logger);
|
|
10
|
-
activate(): Promise<void>;
|
|
11
|
-
forceActivate(): Promise<void>;
|
|
12
|
-
refreshToken(): Promise<void>;
|
|
13
|
-
forceRefreshToken(): Promise<void>;
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=rest_client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rest_client.d.ts","sourceRoot":"","sources":["../../src/api/rest_client.ts"],"names":[],"mappings":"AAIA,OAAc,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAQpC,qBAAa,kBAAkB;IAKlB,QAAQ,EAAE,MAAM;IACvB,OAAO,CAAC,QAAQ;aACA,GAAG,EAAE,MAAM;IAN/B,OAAO,CAAC,YAAY,CAAM;IACnB,KAAK,EAAE,aAAa,CAAC;gBAGjB,QAAQ,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EACR,GAAG,EAAE,MAAM;IAuDzB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAWzB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAa9B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB7B,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;CA6BzC"}
|
package/dist/api/rest_client.js
DELETED
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.InfinityRestClient = void 0;
|
|
13
|
-
const settings_1 = require("../settings");
|
|
14
|
-
const oauth_1 = require("./oauth");
|
|
15
|
-
const xml2js_1 = __importDefault(require("xml2js"));
|
|
16
|
-
const axios_1 = __importDefault(require("axios"));
|
|
17
|
-
const typescript_memoize_1 = require("typescript-memoize");
|
|
18
|
-
const typescript_retry_decorator_1 = require("typescript-retry-decorator");
|
|
19
|
-
const https_1 = __importDefault(require("https"));
|
|
20
|
-
const tls_1 = __importDefault(require("tls"));
|
|
21
|
-
const fs_1 = __importDefault(require("fs"));
|
|
22
|
-
const path_1 = __importDefault(require("path"));
|
|
23
|
-
class InfinityRestClient {
|
|
24
|
-
constructor(username, password, log) {
|
|
25
|
-
this.username = username;
|
|
26
|
-
this.password = password;
|
|
27
|
-
this.log = log;
|
|
28
|
-
this.access_token = '';
|
|
29
|
-
// Load Comodo AAA root certificate for Node.js 22+ compatibility
|
|
30
|
-
// Node.js 22.20+ removed this root CA, but Carrier's API still uses it
|
|
31
|
-
const comodoRootCert = fs_1.default.readFileSync(path_1.default.join(__dirname, 'comodo-aaa-root.pem'), 'utf8');
|
|
32
|
-
// Add Comodo cert to the default CA bundle (not replacing it)
|
|
33
|
-
// This ensures we trust both the default CAs and the Comodo root
|
|
34
|
-
const ca = [...tls_1.default.rootCertificates, comodoRootCert];
|
|
35
|
-
// Create HTTPS agent with augmented CA bundle
|
|
36
|
-
const httpsAgent = new https_1.default.Agent({
|
|
37
|
-
ca: ca,
|
|
38
|
-
});
|
|
39
|
-
this.axios = axios_1.default.create({
|
|
40
|
-
baseURL: settings_1.INFINITY_API_BASE_URL,
|
|
41
|
-
headers: {
|
|
42
|
-
featureset: 'CONSUMER_PORTAL',
|
|
43
|
-
Accept: 'application/xml',
|
|
44
|
-
},
|
|
45
|
-
httpsAgent: httpsAgent,
|
|
46
|
-
});
|
|
47
|
-
// Axios debug logging and error handling
|
|
48
|
-
this.axios.interceptors.response.use(
|
|
49
|
-
// Success
|
|
50
|
-
response => {
|
|
51
|
-
var _a, _b;
|
|
52
|
-
this.log.debug(`${(_a = response.request) === null || _a === void 0 ? void 0 : _a.method} ${response.request.host}${(_b = response.request) === null || _b === void 0 ? void 0 : _b.path}`, `${response.status} ${response.statusText}`);
|
|
53
|
-
return response;
|
|
54
|
-
},
|
|
55
|
-
// Failure
|
|
56
|
-
error => {
|
|
57
|
-
var _a, _b, _c, _d, _e;
|
|
58
|
-
if (axios_1.default.isAxiosError(error)) {
|
|
59
|
-
this.log.debug(`${(_a = error.request) === null || _a === void 0 ? void 0 : _a.method} ${(_b = error.request) === null || _b === void 0 ? void 0 : _b.host}${(_c = error.request) === null || _c === void 0 ? void 0 : _c.path}`, `${(_d = error.response) === null || _d === void 0 ? void 0 : _d.status} ${(_e = error.response) === null || _e === void 0 ? void 0 : _e.statusText}`);
|
|
60
|
-
}
|
|
61
|
-
return Promise.reject(error); // this makes http errors raise
|
|
62
|
-
});
|
|
63
|
-
// Oauth header add
|
|
64
|
-
this.axios.interceptors.request.use(config => {
|
|
65
|
-
return oauth_1.OAuthHeaders.intercept(config, this.username, this.access_token);
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
// Api seems to expect this every min or so. more frequent doesn't seem to
|
|
69
|
-
// make any difference.
|
|
70
|
-
async activate() {
|
|
71
|
-
try {
|
|
72
|
-
await this.forceActivate();
|
|
73
|
-
}
|
|
74
|
-
catch (error) {
|
|
75
|
-
this.log.error('[API] Failure sending activation signal: ', axios_1.default.isAxiosError(error) ? error.message : error);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
async forceActivate() {
|
|
79
|
-
await this.axios.post(`/users/${this.username}/activateSystems`, null, {
|
|
80
|
-
headers: {
|
|
81
|
-
Accept: 'application/json',
|
|
82
|
-
},
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
async refreshToken() {
|
|
86
|
-
try {
|
|
87
|
-
await this.forceRefreshToken();
|
|
88
|
-
this.log.info('Completed login / token refresh successfully.');
|
|
89
|
-
}
|
|
90
|
-
catch (error) {
|
|
91
|
-
this.log.error('[API] Could not refresh access token: ', axios_1.default.isAxiosError(error) ? error.message : error);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
async forceRefreshToken() {
|
|
95
|
-
var _a;
|
|
96
|
-
this.log.info('Attempting login / token refresh.');
|
|
97
|
-
const builder = new xml2js_1.default.Builder({ cdata: true, headless: true });
|
|
98
|
-
const new_xml = builder.buildObject({
|
|
99
|
-
credentials: {
|
|
100
|
-
username: this.username,
|
|
101
|
-
password: this.password,
|
|
102
|
-
},
|
|
103
|
-
});
|
|
104
|
-
const data = `data=${encodeURIComponent(new_xml)}`;
|
|
105
|
-
const response = await this.axios.post('/users/authenticated', data, {
|
|
106
|
-
headers: {
|
|
107
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
108
|
-
Accept: 'application/json',
|
|
109
|
-
},
|
|
110
|
-
});
|
|
111
|
-
if ((_a = response.data.result) === null || _a === void 0 ? void 0 : _a.accessToken) {
|
|
112
|
-
this.access_token = response.data.result.accessToken;
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
this.log.debug(response.data);
|
|
116
|
-
throw new Error('User authentication error.');
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
exports.InfinityRestClient = InfinityRestClient;
|
|
121
|
-
__decorate([
|
|
122
|
-
(0, typescript_memoize_1.MemoizeExpiring)(1 * 60 * 1000)
|
|
123
|
-
], InfinityRestClient.prototype, "activate", null);
|
|
124
|
-
__decorate([
|
|
125
|
-
(0, typescript_memoize_1.MemoizeExpiring)(24 * 60 * 60 * 1000) // every 24 hrs
|
|
126
|
-
], InfinityRestClient.prototype, "refreshToken", null);
|
|
127
|
-
__decorate([
|
|
128
|
-
(0, typescript_retry_decorator_1.Retryable)({
|
|
129
|
-
maxAttempts: 5,
|
|
130
|
-
backOffPolicy: typescript_retry_decorator_1.BackOffPolicy.ExponentialBackOffPolicy,
|
|
131
|
-
backOff: 1000,
|
|
132
|
-
exponentialOption: { maxInterval: 5 * 60 * 1000, multiplier: 5 },
|
|
133
|
-
})
|
|
134
|
-
], InfinityRestClient.prototype, "forceRefreshToken", null);
|
|
135
|
-
//# sourceMappingURL=rest_client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rest_client.js","sourceRoot":"","sources":["../../src/api/rest_client.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,0CAAoD;AACpD,mCAAuC;AAEvC,oDAA4B;AAC5B,kDAA6C;AAE7C,2DAAqD;AACrD,2EAAsE;AACtE,kDAA0B;AAC1B,8CAAsB;AACtB,4CAAoB;AACpB,gDAAwB;AAExB,MAAa,kBAAkB;IAI7B,YACW,QAAgB,EACf,QAAgB,EACR,GAAW;QAFpB,aAAQ,GAAR,QAAQ,CAAQ;QACf,aAAQ,GAAR,QAAQ,CAAQ;QACR,QAAG,GAAH,GAAG,CAAQ;QANvB,iBAAY,GAAG,EAAE,CAAC;QAOxB,iEAAiE;QACjE,uEAAuE;QACvE,MAAM,cAAc,GAAG,YAAE,CAAC,YAAY,CACpC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,EAC3C,MAAM,CACP,CAAC;QAEF,8DAA8D;QAC9D,iEAAiE;QACjE,MAAM,EAAE,GAAG,CAAC,GAAG,aAAG,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;QAErD,8CAA8C;QAC9C,MAAM,UAAU,GAAG,IAAI,eAAK,CAAC,KAAK,CAAC;YACjC,EAAE,EAAE,EAAE;SACP,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,GAAG,eAAK,CAAC,MAAM,CAAC;YACxB,OAAO,EAAE,gCAAqB;YAC9B,OAAO,EAAE;gBACP,UAAU,EAAE,iBAAiB;gBAC7B,MAAM,EAAE,iBAAiB;aAC1B;YACD,UAAU,EAAE,UAAU;SACvB,CAAC,CAAC;QACH,yCAAyC;QACzC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG;QAClC,UAAU;QACV,QAAQ,CAAC,EAAE;;YACT,IAAI,CAAC,GAAG,CAAC,KAAK,CACZ,GAAG,MAAA,QAAQ,CAAC,OAAO,0CAAE,MAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,MAAA,QAAQ,CAAC,OAAO,0CAAE,IAAI,EAAE,EAC/E,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAC5C,CAAC;YACF,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,UAAU;QACV,KAAK,CAAC,EAAE;;YACN,IAAI,eAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,IAAI,CAAC,GAAG,CAAC,KAAK,CACZ,GAAG,MAAA,KAAK,CAAC,OAAO,0CAAE,MAAM,IAAI,MAAA,KAAK,CAAC,OAAO,0CAAE,IAAI,GAAG,MAAA,KAAK,CAAC,OAAO,0CAAE,IAAI,EAAE,EACvE,GAAG,MAAA,KAAK,CAAC,QAAQ,0CAAE,MAAM,IAAI,MAAA,KAAK,CAAC,QAAQ,0CAAE,UAAU,EAAE,CAC1D,CAAC;YACJ,CAAC;YACD,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,+BAA+B;QAC/D,CAAC,CACF,CAAC;QACF,mBAAmB;QACnB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAC3C,OAAO,oBAAY,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC;IAED,0EAA0E;IAC1E,uBAAuB;IAEjB,AAAN,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CACZ,2CAA2C,EAC3C,eAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAClD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CACnB,UAAU,IAAI,CAAC,QAAQ,kBAAkB,EACzC,IAAI,EACJ;YACE,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;aAC3B;SACF,CACF,CAAC;IACJ,CAAC;IAGK,AAAN,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC/B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CACZ,wCAAwC,EACxC,eAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAClD,CAAC;QACJ,CAAC;IACH,CAAC;IAQK,AAAN,KAAK,CAAC,iBAAiB;;QACrB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,IAAI,gBAAM,CAAC,OAAO,CAAC,EAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;YAClC,WAAW,EAAE;gBACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB;SACF,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;QAEnD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CACpC,sBAAsB,EACtB,IAAI,EACJ;YACE,OAAO,EAAE;gBACP,cAAc,EAAE,mCAAmC;gBACnD,MAAM,EAAE,kBAAkB;aAC3B;SACF,CACF,CAAC;QAEF,IAAI,MAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,0CAAE,WAAW,EAAE,CAAC;YACtC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;CACF;AArID,gDAqIC;AAvEO;IADL,IAAA,oCAAe,EAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;kDAU9B;AAeK;IADL,IAAA,oCAAe,EAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,eAAe;sDAWpD;AAQK;IANL,IAAA,sCAAS,EAAC;QACT,WAAW,EAAE,CAAC;QACd,aAAa,EAAE,0CAAa,CAAC,wBAAwB;QACrD,OAAO,EAAE,IAAI;QACb,iBAAiB,EAAE,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE;KACjE,CAAC;2DA6BD"}
|